准备替换掉现实服务中使用的activemq,又开始调研消息队列。初步选中metaQ和ZeroMQ,因为这两款听人介绍得很多,耳朵都快出茧子了。
简单研究后,发现这两个消息队列的不同之处太多,不太适合用来对比。ZeroMQ和metaQ都是支持多语言客户端,性能都很好;相对于activemq这种企业级使用的消息队列,提高了消息的处理性能 ,尽量弱化broker 的功能,而ZeroMQ比较极致,甚至去掉了单独broker,采用类库依赖,客户端实现逻辑。
metaQ 的基础逻辑是
消息生产者负责创建消息并发送到metaQ
服务器,meta服务器会将消息持久化到磁盘,消息消费者从metaQ
服务器拉取消息并提交给应用消费 。与activemq相比弱化了broker的功能,将消息的消费保存、出错、重试等机制都尽可能放在了客户端上;使broker的处理逻辑尽量简单,来提高数据传输和处理的速度。metaQ还支持XA事务;当然XA事务还不是很成熟,另外事务还是对性能有一点影响的。
ZeroMQ并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,它更像是一个底层的网络通讯库,在Socket API之上做了一层封装,将网络通讯、进程通讯和线程通讯抽象为统一的API接口。。所以它的性能也很好,相比metaQ来说,需要自己来实现大量的容错机制的代码。
硬件配置
metaq服务器(activemq也在其中)
型号 DELL 510
CPU Intel(R)Xeon(R) CPU E5606 @ 2.13GHz *4
Mem 12G
网卡 100M
客户端服务器
型号 DELL 710
CPU Intel(R)Xeon(R) CPU E5606 @ 2.13GHz *8
Mem 8G
网卡 100M