activeMQ、rabbitMQ学习对比心得

一、activemq

activemq工作模型比较简单。只有两种模式 queue、topics 。

queue就多对一,producer往queue里发送消息,消费者从queue里取,消费一条,就从queue里移除一条。如果一个消费者消费速度不够快怎么办呢?在activemq里,提供messageGroup的概念,一个queue可以有多个消费者,但是他们得标记自己是一个messageGroup里的。这样,消息会轮训发送给每个消费者,也就是说消费者不会重复消费同一条消息。但是每条消息只被消费一次。

topics就是广播。producer往broker发消息,每个消息包含topic。消费者订阅感兴趣的topic,所有订阅了topic的消费者都会收到消息。当然订阅分持久不持久。持久订阅,当消费者断开一会,再连上来,仍然会把没收到的消费发过来。不持久的订阅,断开这段时间的消息就收不到了。
activemq支持mqtt、ssl。

二、rabbitmq

rabbitmq用erlang写的。在windows上使用也非常方便,在这点上完爆了activemq,不过使用起来比较麻烦,需要创建通道、声明队列、声明交换机等。rabbitmq给我感觉更像oracle,功能非常强大。安装完,也有实例的概念,可以像建数据库一样,建实例,建用户划权限。同时监控系统也很好用。这些都是好处,同时也是累赘,整体上来说rabbitmq比activemq复杂太多了。
简单队列:
activeMQ、rabbitMQ学习对比心得
work模式:
activeMQ、rabbitMQ学习对比心得
订阅模式:
activeMQ、rabbitMQ学习对比心得
路由模式:
activeMQ、rabbitMQ学习对比心得
主题模式(通配符模式):
activeMQ、rabbitMQ学习对比心得
rabbitmq同样也支持主从复制和集群。但是rabbitmq的集群非常多样化,而且需要至少一台机器做为磁盘节点,可以持久化queue和exchange的信息,其他的可以为内存节点。普通集群中,只有exchange,queue这些定义是分布在所有机器上的,而queue中的数据不是冗余的,比如有三台rabbitmq组成了集群,他们共享同样的exchange,queue,但是一条消息数据落到了第一台机器上,另外两台实际上没有这条数据的。 对于整个集群的使用,这样其实没有任何问题。 但出于高可用的角度来想,还是需要完完全全的分布式集群的,万一中间有数据这台机器挂了? rabbitmq对此也有支持,把队列数据也冗余存到三台机器上,称之为镜像队列,但性能要比普通集群低,毕竟一条消息被复制到其他机器上是耗时的事情。
rabbitmq以plugin的形式支持mqtt,和spring整合也非常简单。

上一篇:【ActiveMQ】Spring整合ActiveMQ


下一篇:Redis的底层数据结构-整数集合