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

34
我想知道JMS API是否使用任何协议来传递消息,还是使用自己的协议。如果是前者,那么是哪种协议?
我已经在网上阅读了许多文章,但没有找到答案。

1
@Evan:不是的,那篇文章并没有谈论 JMS 使用的协议。我想知道发送者和接收者之间通过哪些消息进行传输? - Shabeeralimsn
3个回答

47

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

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

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

在更高的层次上,没有保证; 你可能会发现不同实现者之间的专有协议变化。记住,对于JMS,性能通常至关重要; JMS供应商花费了很多精力确保他们的协议("在" TCP/IP之上)表现良好。例如,HTTP就不行。


你好!非常好的解释。那么,根据你最后一句话的意思,HTTP不是作为JMS更高级协议的最佳选择?提前感谢。 - F3R1
我认为对于JMS的需求来说,HTTP传输负荷过大...然而,这并不意味着不能使用HTTP。 - Isaac

13

在JMS规范中没有具体提到任何协议。这完全取决于JMS提供商以及其提供的效率和安全性的方法。可以确定的一件事是,无论提供商使用何种协议在服务器和客户端之间通信,它都将建立在TCP / IP协议(传输层)之上。你可能会有应用层协议HTTP或者如果提供商提供,则可能会有表示层协议SSL。

例如,ActiveMQ支持以下协议:

  • AMQP
  • List item
  • MQTT
  • OpenWire
  • REST
  • RSS和Atom
  • Stomp
  • WSIF
  • WS通知
  • XMPP

更多细节请点击此处


-4

它使用AMQP协议。您可以使用由中间件提供的消息队列使用JMS进行1对1通信。如果您想使用JMS进行1对多发送,则中间件提供主题。它们都至少在IBM MQ中使用位流中的二进制格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接