【问题标题】:Difference in RabbitMq and RabbitMq with JMS pluginRabbitMq 和 RabbitMq 与 JMS 插件的区别
【发布时间】:2017-03-30 09:07:04
【问题描述】:

我是 JMS 的新手。 我对 RabbitMq 知之甚少,现在试图找出 rabbitMQ 与 JMS 的区别。它是如何使用的以及为什么要使用它?

提前致谢。

【问题讨论】:

    标签: spring-boot rabbitmq jms spring-jms


    【解决方案1】:

    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 之间切换。

    【讨论】:

      【解决方案2】:

      我不确定您所说的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 的支持也很有限。 rabbitmq.com/jms-client.html
      • @PetterNordlander 我知道它们是完全不同的,但是,我正在解释使用它们的优缺点。 rabbit mq 的 jms api 还不是很成熟,我之前也看过,甚至考虑过使用它,直到我们知道它的局限性。让它与应用服务器一起工作并使用 MDB 使用它也很麻烦。 (除非你在 jms 中使用 spring)
      猜你喜欢
      • 2013-02-15
      • 2020-07-11
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多