从ActiveMQ切换到RabbitMQ

zxlwwiss  于 12个月前  发布在  RabbitMQ
关注(0)|答案(4)|浏览(133)

我目前正在使用ActiveMQ来满足我的消息传递需求;除了一些数据库故障外,它运行得很好。然而,我至少在考虑尝试RabbitMQ。但在此之前,我想了解以下内容:

  1. RabbitMQ与ActiveMQ有什么不同?RabbitMQ比ActiveMQ做得更好或更差的是什么?
    1.相对而言,RabbitMQ的配置有多容易/困难?
  • RabbitMQ与Spring的集成程度如何?
  • 使用ActiveMQ,我只需将一个连接工厂bean连接到JmsTemplate中,然后使用DefaultMessageListener bean将队列连接到它们各自的处理程序。
axzmvihb

axzmvihb1#

  1. RabbitMQ是一个AMQP代理,而ActiveMQ是一个JMS代理。我建议你阅读the AMQP wikipedia article来了解AMQP中使用的概念,其中一个主要区别是,在AMQP中,生产者在不知道实际消息分发策略的情况下向交换发送消息,而在JMS中,生产者的目标是队列或主题因此很难判断哪种方法做得更好或更差,因为JMS和AMQP之间的语义非常不同。
  2. RabbitMQ的队列和交换都是通过AMQP协议配置的,所以客户端库允许你配置所有的目的地和它们的行为。ActiveMQ需要特定的目的地配置,因为JMS规范没有涵盖任何管理方面的内容。除此之外,RabbitMQ的系统配置是Erlang风格的,而ActiveMQ通常是用XML配置的。所以你必须习惯{tuple}和<>可爱的语法。RabbitMQ * 通常 * 与OS包一起安装,而ActiveMQ发行版是你放在任何地方的归档(或者你嵌入到其他东西中的Maven deps)。
    1.很好:)参见Spring AMQP
hlswsv35

hlswsv352#

AMQP是面向消息的中间件(Message Oriented Middleware,简称JMS)的应用层标准,JMS是Java与面向消息的中间件通信的标准API。
使用JMS的两个不同的Java应用程序可能使用不同的JMS,因此仍然无法通信。ActiveMQ是一个具有JMS库的JMS系统,允许Java程序使用JMS访问它,但它不一定能与另一个使用JMS的Java程序通信。
由于AMQP是与SMTP相同的标准,因此不同的AMQP MySQL系统可以相互操作(假设它们使用相同版本的AMQP)。AMQP MySQL系统没有理由不能为其Java客户端提供JMS库。例如,SwiftMQ提供了JMS API并使用AMQP 1.0。
不幸的是,并不是所有的AMQP系统(有很多)都在使用AMQP 1.0版本。RabbitMQ(在撰写本文时)还没有提供AMQP 1.0支持。其他一些AMQP系统是Apache QPID和StormMQ,但还有很多其他系统。一旦所有这些都支持AMQP 1.0,那么它们应该都可以相互操作。
ActiveMQ在他们的网站http://activemq.apache.org/amqp.html上说,“我们希望ActiveMQ在最新版本完成后实现它。但是,目前ActiveMQ还没有实现AMQP。”现在AMQP 1.0已经发布,ActiveMQ没有进一步说明他们何时会支持它。

igsr9ssn

igsr9ssn3#

由于RabbitMQ是一个AMQP代理,其中的配置很大程度上是通过AMQP本身来处理的,因此您的大多数问题都没有任何意义。
RabbitMQ的一个棘手问题是许多操作系统包都是1.72版本,这已经过时了。你最好直接从他们的网站上得到RabbitMQ 2.51的.deb或.rpm包。之后,你真正需要在AMQP之外做的唯一配置就是使用Rabbitmqctl创建vhost和用户权限。或者,你可以下载web管理控制台的.ez插件,并在重新启动RabbitMQ之前将它们放在正确的目录中。如果你使用的是2.51,强烈推荐使用这个web管理控制台,但如果你坚持使用Debian和Ubuntu saddle的默认1.72,就不可能了。你的。
一旦运行了RabbitMQ,你就可以使用任何语言和任何AMQP库。我个人已经用pika、amqplib和kombu接管了一个Python系统。现在我用的是来自Scala的haigha和Java库,它们都通过AMQP(当然还有MQ代理)相互通信。

4ktjp1zp

4ktjp1zp4#

比较JMS/AMQP概念来比较ActiveMQ和RabbitMQ并不是最重要的:ActiveMQ使用AMQP,并且在商业版本中有用于RabbitMQ的JMS客户端(称为vFabric RabbitMQ)。然而,一些AMQP概念(路由键)在某些用例中可能有用。
我两个都用过,两个都喜欢:

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

相关问题