RabbitMQ和带有JMS插件的RabbitMQ有什么区别?

3

我对JMS还不熟悉,稍微了解了一下RabbitMQ,并且现在正在尝试找出RabbitMQ与JMS的区别。它是如何使用的以及为什么应该使用它?

提前感谢。

2个回答

2

JMS是Java API(JEE的一部分)。

JMS供应商使用专有协议与代理程序通信;它们不是线路兼容的。

通常可以通过更改特定于供应商的配置(连接工厂等)与任何JMS代理程序交互。

供应商提供JMS客户端库以与其代理程序通信。

AMQP是一种线路协议,而不是API。

供应商提供Java客户端API。

可以使用Spring AMQP,在RabbitMQ的amqp-client库及其API之上运行。

可以使用Spring JMS,使用JMS API与任何JMS代理程序(包括具有插件的RabbitMQ)进行通信。

如果需要与任何JMS供应商兼容,请使用spring-jms;如果您只打算使用RabbitMQ,则建议使用Spring AMQP。

或者,使用Spring Integration在两者之上,可以通过更改配置在AMQP和JMS之间切换。


0

我不确定你所说的RabbitMQ for JMS是什么意思,但我会在下面列出它们之间的区别。

RabbitMQ

  1. 使用AMQP协议,不是J2EE规范
  2. 可以用多种语言编写的应用程序来生产和消费消息(如Python、Ruby、Java、C#、Perl等)
  3. 无法与J2EE规范一起使用,因此无法使用默认情况下由J2EE容器提供的XA事务、bean池、连接工厂池等功能
  4. 社区不太成熟,但如果您的组织需要与许多不同类型和语言的应用程序进行通信,则可以牺牲J2EE/JMS规范提供的所有优美功能。

JMS

  1. 这是J2EE规范,任何提供JMS支持的应用服务器都应遵循规范中提到的指南。
  2. 只有Java/J2EE应用程序可以生成和消费消息,但可以通过使用适配器使其适用于其他语言。
  3. J2EE容器提供XA事务、Bean池、连接池等功能,只需在您的端点进行少量配置即可。
  4. 如果您的组织仅使用基于Java的应用程序,则无需考虑RabbitMQ,因为您已经拥有良好运作的JMS支持。

并不是很准确。JMS 只是消息代理的 API 规范而已。RabbitMQ 则是一个实际的消息代理软件实现。这两者并不能直接进行比较。即使是 RabbitMQ 也只支持有限的 JMS 功能。https://www.rabbitmq.com/jms-client.html - Petter Nordlander
@PetterNordlander 我知道它们完全不同,但是我正在解释使用每个的优缺点。Rabbit MQ的jms api并不是很成熟,我之前看过它,甚至考虑过使用它,直到我们了解了它的限制。而且,将其与应用服务器一起使用并使用MDBs消耗它会带来很多麻烦。(除非您使用spring进行jms) - Zeus

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