我正在尝试了解消息队列的基础知识。我看到有许多可用作 MQ 库的实现(ActiveMQ、RabbitMQ、ZeroMQ 等)。我认为启用 J2EE 的服务器也提供了这样的支持。
关于这个话题,我不明白的是,真实软件如何使用这些结构。我的意思是通常交换什么样的消息?字符串?二进制数据?
如果我理解正确,可以配置传输协议,但应用程序数据格式通常是什么?
它是一种新的通信方式,例如 SOAP WS 或 REST WS 或 RPC 等,其中每个都有不同的应用程序消息格式?
2 回答
消息队列通常用于应用程序集成。在企业中,它通常用于实现ESB,但现在有使用类似模式的较小应用程序系统。
关于正在传输的数据——通常是 XML 消息,但实际上取决于应用程序和 MQ 软件——其中一些能够处理二进制消息,而另一些则不能。
例如,假设您有两个需要数据交换的应用程序。如果您使用某种消息传递软件(例如 ActiveMQ)集成它们,那么它将为您带来一些开箱即用的好处,例如路由、容错、平衡等。您可以直接使用 MQ 集成您的应用程序,但 ESB 通常使您能够使用 Web 服务:应用程序只调用 ESB 的 ws,而对底层架构一无所知。MQ 和 ESB 还为您提供了一定程度的抽象:只要保留数据交换接口,您就可以在绝对透明的系统中切换您的应用程序。
MQ主要用于进程间通信,或者用于同一进程内的线程间通信。它们提供异步通信协议,这意味着消息的发送者和接收者不需要同时与消息队列交互。放置在队列中的消息将被存储,直到接收者检索它们。
维基百科可以很好地介绍主题。http://en.wikipedia.org/wiki/Message_queue#Standards_and_protocols
另外,要了解 webservice 和 mq 之间的差异,请阅读此线程:Message Queue vs. Web Services?