技术编程开源 VS 商业,消息中间件你不知道的那些事( 二 )


市场上目前主流的消息中间件有IBM MQ、WebLogic JMS、ActiveMQ、Rabbit MQ、Rocket MQ、Apollo等 。
IBM MQ:WebSphere MQ是IBM业务集成基础性产品 , 以其独特的安全机制、简便快速的编程风格、高稳定性、可扩展性和跨平台性 , 以及强大的事务处理能力和消息通讯能力 , 成为业界市场占有率最高的消息中间件产品 。
WebLogic JMS:WebLogic JMS是Oracle公司一个高性能、集群的Messaging Server , 基于WebLogic产品 , 支持数据库和文件持久化 , 完全支持XA事务 。
RocketMQ:RocketMQ是阿里开源的分布式、队列模型的消息中间件 , 支持严格的消息顺序;支持Topic与Queue两种模式;亿级消息堆积能力;比较友好的分布式特性;同时支持Push与Pull方式消费消息 。
ActiveMQ:ActiveMQ是目前市场上非常流行的开源消息传递和集成服务器 。 它的消息传递速度非常快 , 支持多种跨平台的客户端和协议 , 非常容易构建企业级的集成模式 , 同时支持JMS1.1和J2EE1.4规范 。 ActiveMQ基于Apache2.0许可 。
Apollo:Apollo是以ActiveMQ原型为基础 , 是一个更快、更可靠、更易于维护的消息代理工具 , Apache称Apollo为最快、最强健的STOMP(Streaming Text Orientated Message Protocol , 流文本定向消息协议)服务器 。
RabbitMQ:RabbitMQ是AQMP协议用Erlang实现的消息队列产品 , 它实现了代理(Broker)架构 , 消息在发送到客户端之前可以在中央节点上排队 。 此特性使得RabbitMQ易于使用和部署 , 适宜于很多场景如路由、负载均衡或消息持久化等 。
这是某团队各产品功能和性能对比的最终结果 , 从结果来看:
ActiveMQ各功能模块相对完善 , 不支持集群控制台管理 , 在订阅模式性能测试(10K及以下消息大小)领先其他产品 。
IBM WMQ有最完善的功能点实现 , 在点对点模式读写混合性能测试中领先其他产品 。
Oracle JMS是Weblogic的组件 , 非独立产品 , 各功能模块相对完善 , 在点对点模式纯读取性能测试中领先其他产品 , 不支持AMQP消息协议 。
RabbitMQ有独特的镜像队列功能 , 能支持分布式内存复制实现持久化 , 在分布式扩展方面相对有优势 , 控制台实现性能监控非常丰富 。
RocketMQ功能模块支持较差 , 实现的消息协议是自定义的文本传输协议 , 在1M消息大小的性能测试中领先其他产品 。
Apollo产品成熟度不够 , 不支持集群模式(消息路由) 。
商业产品中IBM WMQ产品成熟度高 , 实现功能完整 , 应用广泛 , 兼容性强 , 跨平台和跨语言支持较好;Oracle JMS是基于WebLogic的一个组件 , 仅支持JMS和WebLogic T3消息协议 , 不支持AMQP协议 , 跨平台支持有待完善 。 开源产品中ActiveMQ最成熟、功能最完善 。
基本功能专题分析
总体来看 , 各产品在C/C++语言客户端API、消息优先级实现相对较好 。
RocketMQ不支持用户名和密码认证、死信机制、消息有效期功能 。
基本功能——语言和协议支持
基本功能——用户名密码认证:主要通过新建用户名和密码 , 使用JMS客户端进行连接尝试 , 实现用户名密码不一致的情况是否允许连接 。
IBM WMQ由队列管理器、队列、通道各部分组成 , 可通过界面对每个组成部分都进行访问控制 。
Oracle JMS消息队列基于AdminServer实例 , 可通过界面添加用户 , 指定JMS消息队列的访问控制 。
RabbitMQ是根据业务划分不同的virtual hosts进行访问控制 。
RocketMQ不支持用户名密码认证 。
ActiveMQ / Apollo支持主题和队列两种模式的访问控制 。
基本功能——死信机制:主要通过测试消息在传递失败或消息过期时是否可以标记为死信 。
IBM WMQ、Oracle JMS、RabbitMQ、ActiveMQ均支持读取异常、消息过期两种死信机制 。