ActiveMQ学习笔记07 - 优缺点

优势:数据库

能够用JDBC安全

虽然使用JDBC会下降ActiveMQ的性能,可是数据库一直都是开发人员最熟悉的存储介质。将消息存到数据库,看得见摸得着。并且公司有专门的DBA去对数据库进行调优,主从分离。
负载均衡

监控完善性能

拥有完善的监控,包括Web Console,JMX,Shell命令行,Jolokia的REST API。应有尽有,对于一个7*24的产品,没有监控就不能上线。学习

界面友善spa

提供的Web Console能够知足大部分状况,还有不少第三方的组件可使用,如hawtio。.net

支持JMS命令行

支持JMS的统一接口,可使用Sprinig的JmsTemplate提高开发效率。blog

推送模式接口

Broker推送消息到Consumer,消息实时性高。

不丢消息

支持基于XA的事务。

有安全机制

支持基于shiro,jaas等多种安全配置机制,能够对Queue/Topic进行认证和受权。

Queue支持高可用和分片

使用Exclusive Consumer能够实现Queue的高可用,使用Message Group能够实现Queue的高可用加消息分片。

Broker支持数据复制

可使用基于数据库的主从复制,或者基于Level DB的复制实现数据的高可用。


缺点:

Broker不支持消息分片

没有像Kafka那样提供消息分片写入Broker的功能,不能实现动态扩展Broker。

Topic不支持高可用和分片

基于Exclusive Consumer和Message Group,只能在Queue上起做用。

能够把Topic转成Queue,以支持高可用和分片,可是数据爆炸

使用Virtual Topic能够将Topic转成Queue,可是每一个订阅者会复制一份消息到Queue,使Broker的存储空间爆发式增加。详细内容可参考ActiveMQ学习笔记06 - 消费者负载均衡与高可用Virtual Topics。

基于LevelDb高可用,必须至少使用3台机器,形成资源浪费

LevelDb使用Zookeeper做为调度中心,经常使用的配置是1台主机,2台备机,并且2台备机不提供服务。形成资源浪费。并且一旦有2台机器死机,虽然仍然有一台机器存活,可是仍然不能提供服务。



适用场景:

只有在须要强一致性事务时须要使用ActiveMQ。使用JDBC的存储形式,这样一旦出错,整个数据库回滚。其余的文件存储机制,无论是levedb仍是kahadb,都是鸡肋,提升了性能,可是不能彻底保证事务一致性。若是考虑性能问题,可使用kafka,metaq。最佳实践是:使用jdbc存储,master-slave方式备份数据,static静态集群的方式高可用,同时知足服务和数据的高可用。若是须要,自行开发数据分片功能。

典型场景:交易,内部oa系统

相关文章
相关标签/搜索