从ActiveMQ切换到RabbitMQ

从ActiveMQ切换到RabbitMQ,activemq,rabbitmq,amqp,Activemq,Rabbitmq,Amqp,我目前正在使用ActiveMQ满足我的消息传递需求;除了一些db故障外,它工作得很好。然而,我至少在考虑尝试RabbitMQ。但在此之前,我想了解以下几点: RabbitMQ与ActiveMQ有哪些不同之处?RabbitMQ比ActiveMQ做得更好还是更差 相对而言,RabbitMQ的配置有多容易/难 RabbitMQ与Spring的集成程度如何? 使用ActiveMQ,我只需将连接工厂bean连接到JmsTemplate中,然后使用DefaultMessageListenerbean将队列

我目前正在使用ActiveMQ满足我的消息传递需求;除了一些db故障外,它工作得很好。然而,我至少在考虑尝试RabbitMQ。但在此之前,我想了解以下几点:

  • RabbitMQ与ActiveMQ有哪些不同之处?RabbitMQ比ActiveMQ做得更好还是更差
  • 相对而言,RabbitMQ的配置有多容易/难
  • RabbitMQ与Spring的集成程度如何?
    • 使用ActiveMQ,我只需将连接工厂bean连接到
      JmsTemplate
      中,然后使用
      DefaultMessageListener
      bean将队列连接到各自的处理程序。我可以用RabbitMQ做同样的事情吗
  • RabbitMQ是AMQP代理,而ActiveMQ是JMS代理。我建议您阅读以了解AMQP中使用的概念,这些概念与您熟悉的JMS中的概念不同。其中一个主要区别是,在AMQP中,生产者在不知道实际的消息分发策略的情况下向交换机发送消息,而在JMS中,生产者以队列或主题为目标(因此知道消息路由的类型)。所以很难说什么做得更好或更糟,因为JMS和AMQP之间的语义非常不同

  • RabbitMQ的队列和交换都是通过AMQP协议配置的,因此客户端库允许您配置所有目的地及其行为。ActiveMQ需要特定的目标配置,因为JMS规范没有涵盖任何管理方面的内容。除此之外,RabbitMQ的系统配置是Erlang式的,而ActiveMQ通常是用XML配置的。所以你必须习惯{tuple}和可爱的语法。RabbitMQ通常与OS软件包一起安装,而ActiveMQ发行版是您放在任何地方(或嵌入到其他地方的Maven deps)的存档

  • 很好:)看


  • 由于RabbitMQ是一个AMQP代理,其中配置主要通过AMQP本身进行处理,因此您的大多数问题都没有任何意义

    RabbitMQ的一个棘手问题是,许多操作系统软件包的版本都是1.72,这已经过时了。您最好直接从他们的站点获得RabbitMQ 2.51的.deb或.rpm包。在此之后,您真正需要在AMQP之外进行的唯一配置是使用rabbitmqctl创建vhost和用户权限。或者,您可以下载web管理控制台的.ez插件,并在重新启动RabbitMQ之前将其放置在正确的目录中。如果您使用的是2.51,则强烈建议使用此web管理控制台,但如果您坚持使用Debian和Ubuntu为您提供的默认1.72,则不可能使用此控制台


    运行RabbitMQ后,可以使用任何语言和任何AMQP库。我个人使用pika、amqplib和kombu接管了Python系统。现在我使用的是Scala的haigha和Java库,它们都是通过AMQP(当然还有MQ代理)相互交流的。

    AMQP是面向消息中间件(MOM)的应用程序级标准。JMS是用于与MOM通信的Java标准API

    使用JMS的两个不同Java应用程序可能使用不同的MOM,因此仍然无法通信。ActiveMQ是一个具有JMS库的MOM系统,允许Java程序使用JMS访问它,但它不一定能够使用WebLogic MOM与另一个JMS Java程序通信

    不同的AMQP MOM系统可以彼此互操作(假设它们使用的是相同版本的AMQP),因为AMQP是与SMTP相同的标准。AMQP MOM系统没有理由不能为其Java客户机提供JMS库。例如,SwiftMQ提供了一个JMS API并使用AMQP1.0

    不幸的是,并非所有的AMQP系统(还有很多)都在使用AMQP的1.0版。RabbitMQ(在撰写本文时)尚未提供AMQP1.0支持。其他一些AMQP系统是ApacheQPID和StormMQ,但还有许多其他系统。一旦所有这些都支持AMQP 1.0,那么它们都应该相互可操作


    在他们的网站上,ActiveMQ说,“我们希望ActiveMQ在最终确定后能够实现最新版本。但是,目前ActiveMQ没有实现AMQP。”现在AMQP 1.0已经推出,ActiveMQ没有进一步说明何时支持它。

    比较JMS/AMQP概念来比较ActiveMQ和RabbitMQ并不是最重要的:ActiveMQ讲AMQP,商业版中有RabbitMQ的JMS客户端(称为vFabric RabbitMQ)。然而,一些AMQP概念(路由密钥)在某些用例中可能很有用

    我两者都用过,而且都喜欢:

    • 发现在某些系统(过时的包存储库)上安装Erlang+RabbitMQ比Java+ActiveMQ更难
    • RabbitMQ有一些不错的集群/HA选项(镜像队列、集群联合)。不需要共享动物园管理员或共享数据库,但应该解决“大脑分裂”问题
    • ActiveMQ更重(内存消耗)
    • ActiveMQ与apachecamel完美集成,使用RabbitMQ,您最好使用Spring集成(Camel-RabbitMQ/AMQP有点粗糙)
    • ActiveMQ支持XA事务,可以嵌入Java应用程序,可以嵌入Camel
    • 使用ActiveMQ进行Java自动化测试更容易(嵌入式代理)

    感谢您提供的有用答案。接下来,RabbitMQ是否有管理/监控控制台(基于web或其他方式)?RabbitMQ有很多管理/监控控制台(请参阅)。在您推荐的所有选项中,我使用Alice/Wonderland,直到官方管理控制台()出现,这是我现在默认使用的。监控取决于您的工具:SNMP插件与Zabbix配合使用效果很好。我最近也成功地使用了Scout插件(和)。