4年前 (2021-04-16)  相关技术 |   抢沙发  968 
文章评分 0 次,平均分 0.0

找到合适的开源消息代理对于有效解决各种应用程序类型中的消息传递问题至关重要。今天我们来看两个常用于解决这些问题的开源消息代理ActiveMQRabbitMQ

在这篇文章中,我们将从消息代理的概述开始,然后从特性、性能和企业就绪性方面比较ActiveMQ和RabbitMQ。

什么是消息代理?

消息代理帮助获取发送方应用程序的消息并将其传递给接收方应用程序。

消息代理通常还可以路由、转换消息格式和协议,以帮助连接可能有不同需求的应用程序。它们是一个完整的消息传递解决方案的面向消息的中间件的构建块。

ActiveMQ和RabbitMQ

ActiveMQ和RabbitMQ都是在生产环境中广泛使用和部署的开源、高性能和可靠的消息代理。它们通过与各种应用程序共享定义的消息内容来帮助计算机彼此交互,从而使用底层的电信系统。ActiveMQ和RabbitMQ广泛应用于各种应用、机器业务和电信数据通信。

ActiveMQ(5.16.0,2020年6月1日发布)和RabbitMQ(3.8.9,2019年10月1日发布)的最新版本都是流行的开源MessageBroker应用程序。RabbitMQ是AMQP协议的原始实现,它基于这样一种体系结构:消息在发送到目的地之前在中心节点上排队。相比之下,ActiveMQ可配置为允许根据消息传递、性能和高可用性需求设计不同的代理网络体系结构。

比较ActiveMQ与RabbitMQ

正如我们在下表中概述的,ActiveMQ和RabbitMQ有许多关键的区别。

ActiveMQ与RabbitMQ分类比较:

分类 ActiveMQ RabbitMQ
实现语言 完全用Java编写。 用Erlang或OTP语言编写的模块。
工作原理 ActiveMQ在企业项目中用于存储多个实例,并支持基于JMS消息传递规范的集群环境。 RabbitMQ是在底层AMQP协议中执行的消息代理,在通信过程中充当两个应用程序之间的中介。
源代码已开源 是的,由Apache基金会开放源码。 是的,RabbitMQ使用Mozilla许可证。
支持多种语言 ActiveMQ支持Java、C、C#、Haxe、Node.js、Perl、Racket、Python和Ruby on Rails。 RabByMQ支持多种语言,如java、Ruby、Python、PHP、Perl Read、Go、JavaScript、C++和C++。
应用协议 ActiveMQ支持OpenWire、STOMP、AMQP、MQTT和httpweb服务协议,并支持SSL进行加密。 RabbitMQ支持AMQP、MQTT、STOMP、HTTP和WebSockets协议。
Broker数量 ActiveMQ可以从单个代理体系结构扩展到复杂的多代理体系结构 RabbitMQ只需要一个代理。
管理需要 ActiveMQ基于基于Web的管理工具Web控制台。外部CLI可用。 RabbitMQ需要管理工具支持。具有本机CLI支持。
使用的工具 ActiveMQ是一个支持多协议的消息代理。 rabbitmqhttp在管理插件上工作。
可用的培训计划 OpenLogic提供由专家引导的按需ActiveMQ培训。  VMWare提供培训。
同步方法 ActiveMQ配置了同步方法,但是可以通过修改设置面板将其修改为异步。 RabbitMQ同时适用于同步和异步方法。
消息模式 ActiveMQ消息模式包括PUB-SUB和消息队列。 RabbitMQ的一般消息模式包括消息队列、PUB-SUB和RPC以及路由。
未来发展方向 Apache网站上概述了ActiveMQ和activemqartemis的开发。 更新细节可以在RabbitMQ的changelog中查看,开发人员会不断更新,以修复bug并提高性能。
跨平台 支持 支持
成本 免费提供 免费提供

就这些差异中的哪一个对于团队来说在使用一个而不是另一个之前最重要而言,下面的十个类别比较是最重要的。

1. 客户端和协议

apache activemq速度很快,支持许多跨语言客户机和协议,具有易于使用的企业集成模式和许多高级特性。ActiveMQ还完全支持JMS1.1和J2EE1.4。apache activemq是在apache2.0下发布的,而RabbitMQ是在高级消息队列协议v1.0上实现的,并且是用erlangv20/OTP编写的。

2. 许可

ActiveMQ是由Apache软件基金会开发的,而RabbitMQ是由戴尔旗下的Pivotal开发的。ActiveMQ拥有Apache许可证2.0,而RabbitMQ拥有Mozilla公共许可证。

3. 可扩展性

RabbitMQ基于中心/中心轮辐工作,这使它成为一种独特的方法。RabbitMQ是非常便携和用户友好的。这是因为主要操作(如负载平衡或持久消息队列)仅在有限的代码行上运行。不幸的是,由于来自中心节点的额外延迟和消息信封的大小,这种方法速度较慢,可伸缩性较差。

相比之下,ActiveMQ更易于实现,并提供了诸如集群、缓存、日志记录和消息存储等高级功能。

4. 部署

RabbitMQ嵌入到应用程序中,充当中间服务。它的与众不同之处在于支持加密,在停机时按预先计划将数据存储在磁盘中,制造集群,复制服务,从而具有高可靠性。它部署在OTP平台上,确保作为整个系统关键节点的队列具有最大的可伸缩性和稳定性。将RabbitMQ实现为一个集群是非常重要的。

对于异步消息传递,RabbitMQ支持多个应用程序之间的数据集成,并允许我们轻松地将数据扇出到不同数量的订阅者。

5. 客户端/服务器支持

ActiveMQ由支持多个客户机或服务器的Java消息服务客户机组成。这些属性(如计算机集群)支持ActiveMQ来管理通信系统。

ActiveMQ的当前版本是activemq artemis和activemq 5classic。

采用RabbitMQ设计了高级消息队列协议。它被扩展以支持不同的协议,如MQTT和STOMP。RabbitMQ的一些特性包括快速同步消息传递、高级工具和插件、分布式部署、开发人员友好型和集中管理。

6.体系结构

activemq5classic是用Java消息服务1.1实现的,具有可插拔的体系结构。这里有一个单独的代理网络,用于分配负载。

activemq artemis提供了惊人的性能,并部署在JMS的1.1和2.0版本的消息传递应用程序的事件流的非阻塞体系结构中。它有一个可适应的集群来分配负载。它是一种强大的寻址方法,提供了方便的迁移。

7. 文档

ActiveMQ可以通过提供更好的文档来改进。作为参考,ibmq有30年的经验可供借鉴,并有30年的发展和改进经验。ActiveMQ没有这种级别的遗产来源。比较这两者,我们发现IBM文档更好,但背后有更多的投资。

8. 集成

RabbitMQ有许多优点,支持多种消息传递协议、传递确认和消息队列。它通过各种语言(如Python、.NET和Java)启用。它也可以用于诸如Chef、Docker和Puppet等应用程序。它通过开发集群提供了高吞吐量和可用性。它可以通过可插拔的身份验证和授权来支持公共云和私有云。HTTP-API是一个命令行工具,其用户界面有助于管理和监视RabbitMQ代理。

9. 效率

ActiveMQ具有多种优点,可以根据需要应用于高效率的应用。RabByMQ支持C、C++、.NET和Python,可以通过高级消息队列协议嵌入多平台应用程序。它可以灵活地通过STOMP在web应用程序之间交换消息,STOMP是一种面向流文本的消息协议。它还编程管理物联网设备。

10. 性能

这两个messagebroker应用程序都为高吞吐量生产场景中的性能调优提供了多个配置选项。正如下面RabbitMQ中使用最小忙等待的示例:

RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="+sbwt very_short +sbwtdcpu very_short +sbwtdio very_short"

RabbitMQ中还有一些特定的绑定策略,用于帮助优化性能。ActiveMQ允许根据消息工作负载调整持久性和持久性保证,从而在消息传递速度和高可用性之间进行权衡。对于更大的部署,可以跨多个代理水平扩展以增加消息量,也可以垂直扩展以处理大量客户端或多个站点。

哪个更适合企业应用程序?

RabbitMQ擅长于单代理实现(快速和最快),通常用于简单的场景。它有一个允许复杂架构的插件架构。

ActiveMQ以较小的速度在本地支持复杂的多代理网络体系结构和使用多种协议的客户机。它与Camel(可以在代理中运行,也可以独立运行)捆绑在一起,以支持大量的企业集成模式。

小结

ActiveMQ和RabbitMQ都是高性能和可靠的消息传递解决方案,其原理和优势略有不同。但是,在生产环境中使用它们之前,了解它们的独特能力是很重要的。

RabbitMQ是基于erlang的精简可靠部署的理想选择,在AMQP协议客户机中表现出色。

ActiveMQ擅长于复杂的企业集成,并且基于JMS,还通过其广泛的本机协议支持与多种系统集成,并允许在必要时通过Camel进行其他集成。ActiveMQ在单代理场景中运行良好,但根据需要还支持多种更复杂的体系结构。

 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1826.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册