ActiveMQ消息持久化

 

一、不使用持久化


<broker persistent="false"> 
  </broker>


那么activemq 会自动使用 内存保存消息,使用  org.apache.activemq.store.memory.MemoryPersistenceAdapter 来保存



 



二、消息数据灾难恢复



http://activemq.apache.org/replicated-message-store.html



推荐使用Master/Slave



 



三、持久化



(1)、 Configuring Kaha Persistence,一种格式化消息到文件的引擎,当前ActiveMQ默认的消息持久化引擎。



5.0之前还有一种消息持久化引擎AMQ,但是已经废弃了,推荐使用Kaha。



Kaha Peristence 是一个消息持久化到文件的存储解决引擎,也是ActiveMQ项目的一部分。

提供最优性能进行调优的典型消息使用模式,其中包括写/读和丢弃的消息很快被保存。



数据存储在Kaha附加到数据日志,一旦数据不在有用处,日志文件会丢弃那部分数据。

ActiveMQ 5.0 and above:



<broker brokerName="broker"persistent="true"useShutdownHook="false"> 
             <transportConnectors> 
               <transportConnector uri="tcp://localhost:61616"/> 
             </transportConnectors> 
             <persistenceAdapter> 
               <kahaPersistenceAdapter directory="activemq-data"maxDataFileLength="33554432"/> 
             </persistenceAdapter> 
           </broker>



 


(2)、LevelDB Persistence


,这种文件系统是从ActiveMQ5.8之后引进的,它和KahaDB非常相似,也是基于文件的本地数据库储存形式,但是它提供比KahaDB更快的持久性。与KahaDB不同的是,它不是使用传统的B-树来实现对日志数据的提前写,而是使用基于索引的LevelDB。



< persistenceAdapter >            


                                 <                           levelDBdirectory                           =                           "activemq-data"                           />


             </ persistenceAdapter >



 



(3)、使用JDBC持久化到数据库



<persistenceAdapter> 
                <jdbcPersistenceAdapter dataSource="#my-ds"/> 
          </persistenceAdapter>




注:my-ds 数据库要预先定义好



 



 


(4)、 Replicated LevelDB Store 


 



在ActiveMQ 5.9中,复制并且存储。



它使用Apache zookeeper 从一组代理节点中配置(全部相同的配置),选择一个作为主节点并且存储消息,然后同步所有的其他子节点,让其他子节点更新通过复制到主节点的所有更新。



直白点:zookeeper+ActiveMQ集群,防止单节点挂机。




 

<persistenceAdapter>          


                       <replicatedLevelDB          


                               directory="${activemq.data}"          


                               replicas="2"          


                               bind="tcp://0.0.0.0:61619"          


                               zkAddress="127.0.0.1:2181"          


                               zkPassword="password"          


                               zkPath="/activemq/leveldb-stores"          


                               />          


           </persistenceAdapter>




一图胜千言:



 

emqx将消息持久化_持久化


推荐使用此方式做为生产中配置。