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

时间:2014-05-27 05:59:19

标签: java jms messaging

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

我在网上看过很多文章,但我找不到答案。

3 个答案:

答案 0 :(得分:33)

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

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

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

在较高级别,没有保证;您可能会发现不同实现者之间的专有协议不同。请记住,使用JMS,性能通常至关重要; JMS供应商付出了很多努力来确保他们的协议("以上" TCP / IP)表现良好。例如,HTTP不会做。

答案 1 :(得分:10)

JMS规范中没有提到这样的协议。它纯粹依赖于JMS提供者和他提供效率和安全性的方法。可以肯定的是,无论协议提供者使用什么来在服务器和客户端之间进行通信都将建立在TCP / IP协议(传输层)之上。您可能拥有作为应用程序层协议的HTTP,或者如果提供商提供它,您可能拥有SSL,这是一个表示层协议。

例如,ActiveMQ支持以下协议

  • AMQP
  • 列表项
  • MQTT
  • OpenWire
  • REST
  • RSS和Atom
  • 践踏
  • WSIF
  • WS通知
  • XMPP

更多详情here

答案 2 :(得分:0)

它使用AMQP协议。您可以使用JMS通过Middleware提供的Message Queue进行一对一通信。如果要使用JMS发送一对多,则中间件提供主题。两者都至少在IBM MQ中使用二进制格式的位流。