1. 大量的消息每页被消费,能否发生oom异常?
1. 可以控制每个消息队列中数据的大小,不允许无线填充数据,避免该队列多大,导致过度消耗系统资源问题; 可以控制队列的内存大小;
2. activeMQ数据丢失怎么办?
可以使用对数据进行持久化JDBC,AMQ(日志文件),KahaDB和LevelDB,
3. activeMQ如何持久化数据?
*** 准确答案:http://www.360doc.com/content/11/1027/19/1542811_159664188.shtml
本文只介绍三种方式,分别是持久化为文件,MYSql,Oracle。
***很准确的答案:https://www.jianshu.com/p/deb1816271d1
以mysql为例子,说明如何持久化,并解释了3张表机构;
**** 更准确的答案: https://www.jianshu.com/p/43cd33dc96af
提到了多种持久化方案的优缺点;
ActiveMQ的消息持久化机制有JDBC,AMQ(日志文件),KahaDB和LevelDBKahaDB是从ActiveMQ 5.4开始默认的持久化插件
从ActiveMQ 5.6版本之后,又推出了LevelDB的持久化引擎。目前默认的持久化方式仍然是KahaDB,不过LevelDB持久化性能高于KahaDB,可能是以后的趋势。
在ActiveMQ 5.9版本提供了基于LevelDB和Zookeeper的数据复制方式,用于Master-slave方式的首选数据复制方案。
*其他參考: http://www.360doc.com/content/11/1027/19/1542811_159664912.shtml
利用消息队列的异步策略,可以从很大程序上缓解程序的压力,但是,如果MQ所在的机器down机了,又如果队列中的数据不是持久的就会发生数据丢失,后果是可想而知的, 所以消息的持久化是不可不讨论的话题。
方式一:利用mysql持久化activeMQ数据
1)改动部分主要是设置了mysql的datasource声明, 还有就是采用mysql作为persistenceAdapter,并声明如下;
<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com