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


RabbitMQ需购买商业JMS客户端实现 。
Rocket采用自定义文本协议实现事务提交、回滚等功能 。
高可用:通过测试当队列服务器出现故障或者网络故障时 , 客户端可以自动连接到其他队列 , 保持业务的不间断 。
所有产品均能实现FAILOVER机制 , RabbitMQ需通过HAProxy来实现FAILOVER 。
仅RabbitMQ能实现消息的无持久化内存复制 。
IBM WMQ、RabbitMQ、RocketMQ、ActiveMQ能实现Master-Slave模式高可用 。
稳定性:通过持续发送消息 , 主机CPU在60%以上压力下 , 消息中间件运行情况 。 各产品均表现出良好的稳定性 , 在连续12小时高并发测试情况下 , 均能保持100%的消息处理正确率 。
扩展功能专题分析
各产品在文件传输功能、事件消息机制、网络限流方面均能较好的实现 。
RabbitMQ文件传输、大文件传输、交易一致性、延迟队列功能需购买JMS客户端实现 。
RocketMQ不支持大文件传输 。
Apollo不支持续传重传、延迟队列功能 。
文件传输功能:通过测试服务器之间的文件传输 , 统计数据发送和接收正确率 , 检验是否有文件丢失或重复 。
所有产品均能实现文件传输功能 。 商业产品本身支持文件传输功能 , 开源产品需通过应用程序实现 。
RabbitMQ文件传输功能需购买JMS客户端实现 。
事件消息机制功能:通过在测试时 , 人为进行网络断连等异常事件 , 在出现异常事件后消息节点会收到异常事件信息 。
所有产品均能实现事件消息机制功能 。
IBM WMQ支持各种事件的配置是否启用 , 如权限事件、禁止事件、本地事件等等 。
网络限流功能:通过调整消息中间件的配置参数 , 测试允许使用的网络带宽 , 进行数据传输 , 检查限流功能 。
IBM WMQ对网络限流支持较为全面 , 能通过消息大小限制、批次传输限制、消息总量限制、内存使用限制、磁盘使用限制等各种配置实现对网络限流功能 。
Oracle JMS可通过消息大小限制、消息总量限制实现对网络限流功能 。
RabbitMQ支持通过对内存使用限制、磁盘使用限制实现对网络限流功能 。
RocketMQ支持通过消息大小限制实现网络限流功能 。
ActiveMQ支持通过内存使用限制实现网络限流功能 。
【技术编程开源 VS 商业,消息中间件你不知道的那些事】Apollo支持通过消息总量限制实现网络限流功能 。
技术编程开源 VS 商业,消息中间件你不知道的那些事
本文插图
续传重传功能:通过人为断开网络来测试消息中间件的断点续传能力 , 统计数据发送和接收正确率 , 检查是否有数据丢失或重复 。
除Apollo之外的产品均支持续传重传功能 。
Apollo不支持ConnectionControl command处理 , 不能实现自动重连 , 所以不支持重传功能 。 预计在Apollo1.8版本中实现该特性 。
大文件传输效率:通过进行大文件传输测试消息中间件对大文件传输的支持程度 。
IBM WMQ、Oracle JMS、ActiveMQ、Apollo支持大文件传输 。
RabbitMQ需购买JMS客户端实现 。
RocketMQ不支持大文件传输 。
技术编程开源 VS 商业,消息中间件你不知道的那些事
本文插图
交易一致性:通过验证消息中间件是否支持交易最终一致性 。
除Rocket之外的产品均支持交易一致性功能 。
RabbitMQ需购买JMS客户端实现 。
开源版RocketMQ不支持分布式事物 , 商业版ONS支持 。
延迟队列:通过应用程序设置消息延时时间 , 在延时时间后消息是否被丢弃或销毁 , 无法被处理 。
除Apollo之外各产品均支持延迟队列功能 。
RabbitMQ需购买JMS客户端实现 。
总体性能测试结果
各产品在水平扩展性能测试方面 , 均有优秀的表现 。