Open MQ使用哪种传输协议?

6
我听到一个来自IBM的人谈论MQTT,他说MQTT是目前最轻量级的消息传递协议。他的论点是单个消息产生的最小开销为2个字节。然而,我也听说过HTML5 WebSockets的开销也是2个字节?无论如何,由于我计划将Open MQ用作消息应用程序的JMS提供者,我的提供者使用哪个协议变得很重要。我无法在任何地方找到答案,甚至在谷歌上搜索了Open MQ文档和使用Open MQ作为JMS提供者的GlassFish文档。一些互联网上的博客文章等表示AMQP,但我找不到可靠的参考来支持这个说法。
Open MQ使用哪种协议,你怎么知道?
2个回答

7
我认为您混淆了一些概念:MQTT是一个应用层协议,使用TCP作为传输协议。MQTT也可以与Websockets结合使用。若要将其简化,MQTT是JMS和AMQP的轻量级替代品。
AMQP是JMS的受欢迎且可靠的替代品,非常适用于商业和关键任务的消息传递。AMQP功能非常丰富且广泛使用。请注意,AMQP是一种消息传递协议,而JMS则是一个API(甚至可以使用AMQP作为传输)。您可以使用类似RabbitMQ Java Client等库在Java应用程序中直接使用AMQP。
另一方面,MQTT非常适用于遥测数据和具有多个客户端与单个消息代理通信的场景,其中低带宽使用、内存效率和客户端电池寿命至关重要。
JMS不定义任何传输协议(与MQTT相反),因此可以使用任何东西。我个人认为TCP在这里也很合适。
我不知道OpenMQ,但对于JMS和AMQP,我可以推荐ActiveMQ。对于MQTT,有一些经纪人,包括HiveMQMosquitto
免责声明:我是HiveMQ的开发人员,所以可能有点偏见。

2
Dominik,非常感谢您的出色回答。但是Open MQ不可能在AMQP上运行JMS吗?您将AMQP称为JMS的“替代品”,但是JMS只是一个API。 - Martin Andersson
Martin,我澄清了关于“替代”部分的答案的一些内容。似乎OpenMQ使用TCP作为默认传输协议。在我看来,文档并不是很好。由于这是您最初的问题,我很抱歉,我不能给出最终的答案。希望其他人能够帮忙 :) - Dominik Obermaier
1
Dominik,真希望我能接受你的答案。让我告诉你,你对我非常有帮助。然而,我正在寻找一个权威来源的答案,以便我不能将你的回复作为我的问题的答案进行检查。你似乎在Java消息传递方面很有知识,我觉得关于Java消息传递如何运作的博客文章和教程短缺。也许你可以在互联网上发布这样一篇文章? - Martin Andersson
JMS只是一个API,而不是协议,因此MQTT并不能替代JMS。JMS也可以在MQTT之上使用。例如,Qpid正在使用基于AMQP的JMS。我已经进行了性能测试,并推荐RabbitMQ用于消息传递。OpenMQ、ActiveMQ和Qpid比RabbitMQ慢。 - Ben
我也对Open MQ的底层协议很感兴趣。不幸的是,这个答案并没有帮助到我。 - Sergey Shcherbakov

0

我认为OpenMQ使用STOMP作为应用层协议。除了STOMP之外,没有其他关于OpenMQ支持哪种协议的文档。

编辑:找到了UMS协议,看起来OpenMQ默认使用它。https://mq.java.net/4.3-content/ums/umsIntro.html

OpenMQ无法使用AMQP,因此我建议使用RabbitMQ。


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