ActiveMQ四种存储器分析

ActiveMQ有四种存储器,下面分别介绍和分析各自的特点和优缺点。


1、KahaDB message store:是ActiveMQ的默认以及推荐的存储器,特点是基于文件、支持事务日志、可靠、可扩展、速度快等。重点讨论一下后两点。

可扩展体现在KahaDB支持其他三种存储器的外接扩展,也就是说可以同时用不止一种,这样可以取长补短,适合更广的应用场景,达到性能最佳。

速度快,书中也总结了3点:(1)快速的事务日志;(2)高度优化的消息ID索引;(3)在内存中的消息缓存。具体分析,消息直接添加在当前日志文件的尾部,所以存的快;用一个索引文件存储所有的destination,可谓高度优化;支持内存缓存也是必然,但在缓存回复策略上不如内存存储器。


2、AMQ message store:在基于文件、支持事务方面和KahaDB类似。不同之处如下:

优点:索引用的是hashbin(哈希桶,没有查到权威定义,可理解为哈希表),自然比KahaDB的Btree索引要快,并且磁盘读写用的是nio,速度也快,所以用于消息吞吐量要求比较大的时候是最佳选择。(有的人把吞吐量理解成消息总数量其实不正确,应该是消息出入队的速率。)

缺点:对于每个destination都要建一个索引,所以不适于很多destination并发的场合,而这恰恰是KahaDB的优势,它可以支持最大10000个queue的同时等待。

3、JDBC message store:默认的JDBC驱动是ApacheDerby,同时支持MySQL、PostgreSQL、Oracle、SQLServer、Sybase、Informix、MaxDB等主流的关系数据库。用三张表结构来存储消息,分别是ACTIVEMQ_MSGS、ACTIVEMQ_ACKS、ACTIVEMQ_LOCK。第二张表外键关联到第一张表,共同存储消息,第三张表用于锁定保证只有一个broker实例可以访问数据库。(关于Derby这里不作介绍,可自行查阅)


4、Memory message store:用于实时消息的缓存,只针对非持久订阅的消费者提供了5种订阅恢复策略,可以极大程度增强非持久订阅的可用性。也就是说对于持久订阅的消费者是用不到内存存储的。

猜你喜欢

转载自blog.csdn.net/qq_26182553/article/details/80452052
今日推荐