我目前正在使用ActiveMQ来满足我的消息传递需求;除了一些数据库故障外,它运行得很好。然而,我至少在考虑尝试RabbitMQ。但在此之前,我想了解以下内容:
- RabbitMQ与ActiveMQ有什么不同?RabbitMQ比ActiveMQ做得更好或更差的是什么?
1.相对而言,RabbitMQ的配置有多容易/困难?
- RabbitMQ与Spring的集成程度如何?
- 使用ActiveMQ,我只需将一个连接工厂bean连接到
JmsTemplate
中,然后使用DefaultMessageListener
bean将队列连接到它们各自的处理程序。
4条答案
按热度按时间axzmvihb1#
1.很好:)参见Spring AMQP。
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没有进一步说明他们何时会支持它。
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代理)相互通信。
4ktjp1zp4#
比较JMS/AMQP概念来比较ActiveMQ和RabbitMQ并不是最重要的:ActiveMQ使用AMQP,并且在商业版本中有用于RabbitMQ的JMS客户端(称为vFabric RabbitMQ)。然而,一些AMQP概念(路由键)在某些用例中可能有用。
我两个都用过,两个都喜欢: