我想知道JMS API是否使用任何协议来传递消息,还是使用自己的协议。如果是前者,那么是哪种协议?
我已经在网上阅读了许多文章,但没有找到答案。
我已经在网上阅读了许多文章,但没有找到答案。
标准的JMS API仅仅是一组接口; JMS提供商(例如WebSphere MQ)为这些接口提供自己的实现。
关于所有JMS实现,唯一可以确定的是它们都遵循JMS API; 除此之外,JMS实现可以使用任何协议来履行JMS API合同。
现在,当你特别询问"协议"时,你还应该定义你所指的通信中的哪个"层" (例如查看OSI模型)。当你的JMS客户端必须与位于网络上另一台机器上的JMS服务器进行通信(典型情况),在客户端和服务器之间使用的协议将基于TCP/IP的某种方式。通过线路,你将能够看到TCP/IP数据包来回交换。
在更高的层次上,没有保证; 你可能会发现不同实现者之间的专有协议变化。记住,对于JMS,性能通常至关重要; JMS供应商花费了很多精力确保他们的协议("在" TCP/IP之上)表现良好。例如,HTTP就不行。
在JMS规范中没有具体提到任何协议。这完全取决于JMS提供商以及其提供的效率和安全性的方法。可以确定的一件事是,无论提供商使用何种协议在服务器和客户端之间通信,它都将建立在TCP / IP协议(传输层)之上。你可能会有应用层协议HTTP或者如果提供商提供,则可能会有表示层协议SSL。
例如,ActiveMQ支持以下协议:
更多细节请点击此处。
它使用AMQP协议。您可以使用由中间件提供的消息队列使用JMS进行1对1通信。如果您想使用JMS进行1对多发送,则中间件提供主题。它们都至少在IBM MQ中使用位流中的二进制格式。