JMS 使用哪种协议来发送和接收消息?

Posted

技术标签:

【中文标题】JMS 使用哪种协议来发送和接收消息?【英文标题】:Which protocol does JMS use to send and receive messages? 【发布时间】:2014-07-15 22:19:31 【问题描述】:

我想知道 JMS API 是否使用任何协议来传输消息,或者是否使用自己的协议。如果是前者,是哪种协议?

我在网上阅读了很多文章,但我找不到答案。

【问题讨论】:

@埃文:-不。那篇文章不是在谈论用于 JMS 的协议。我想知道发件人和收件人之间通过哪些邮件传输? 【参考方案1】:

标准的 JMS API 只是一组接口; JMS 提供者(例如 WebSphere MQ)为这些接口提供自己的实现。

对于所有 JMS 实现,唯一可以肯定的是它们都遵循 JMS API;除此之外,JMS 实现可以使用任何协议来履行 JMS API 合同。

现在,当您特别询问“协议”时,您还应该定义您所指的通信中的哪个“层”(例如,查看OSI Model)。当您的 JMS 客户端必须与位于网络上另一台机器上的 JMS 服务器通信时(典型情况),客户端和服务器之间使用的协议将以一种或另一种方式基于 TCP/IP。通过网络,您将能够看到 TCP/IP 数据包来回交换。

在更高的层次上,没有任何保证;您可能会发现不同实现者之间的专有协议有所不同。请记住,对于 JMS,性能通常至关重要。 JMS 供应商投入了大量精力来确保他们的协议(“高于”TCP/IP)运行良好。例如,HTTP 就不行。

【讨论】:

您好!很好的解释。因此,在您的最后一句话中,您的意思是 HTTP 不是作为 JMS 更高级别协议的最佳选择吗?感谢您的提前。 我认为 HTTP 为 JMS 的需求带来了太多的开销……但是,这并不意味着无法使用 HTTP。【参考方案2】:

JMS 规范中没有提到这样的协议。它完全依赖于 JMS 提供者及其提供效率和安全性的方法。可以肯定的是,任何协议提供者用于在服务器和客户端之间进行通信都将建立在 TCP/IP 协议(​​传输层)之上.您可能拥有作为应用层协议的 HTTP,或者如果提供商提供它,您可能拥有作为表示层协议的 SSL。

例如 ActiveMQ 支持以下协议

AMQP 列表项 MQTT OpenWire 休息 RSS 和 Atom 跺脚 WSIF WS 通知 XMPP

更多详情here.

【讨论】:

【参考方案3】:

它使用 AMQP 协议。您可以使用 JMS 使用 Middleware 提供的 Message Queue 进行 1 对 1 通信。如果要使用 JMS 发送一对多,中间件提供了 Topic。至少在 IBM MQ 中,它们都在比特流中使用二进制格式。

【讨论】:

以上是关于JMS 使用哪种协议来发送和接收消息?的主要内容,如果未能解决你的问题,请参考以下文章

ActiveMQ的介绍及使用

Spring使用Spring和AMQP发送接收消息(上)

消息队列:快速上手ActiveMQ消息队列的JMS方式使用(两种模式:Topic和Queue的消息推送和订阅)

JMS学习

从JMS到KafKa

Spring Boot的JMS发送和接收队列消息,基于ActiveMQ