activimq消息队列持久化配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了activimq消息队列持久化配置相关的知识,希望对你有一定的参考价值。

activimq持久化常用的有三种方式:1、文件持久化 2、mysql持久化 3、oracle持久化

在activimq的配置文件中默认开启了文件持久化

技术分享

同时我们需要修改一行代码:

技术分享

这样在activimq重启之后就不会有消息丢失了

 

如果要使用mysql持久化的话需要修改配置文件

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

然后还需要配置一个datasource,这个datasource需要配置在broker节点外面

技术分享

1 <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
2         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
3         <property name="url" value="jdbc:mysql://localhost:3306/test?relaxAutoCommit=true"/>
4         <property name="username" value="root"/>
5         <property name="password" value="Java0713!"/>
6         <property name="maxActive" value="200"/>
7         <property name="poolPreparedStatements" value="true"/>
8     </bean> 

同时需要mysql数据库驱动包mysql-connector-java-5.1.5-bin.jar,将该jar包放到activimq的lib目录下

启动activimq,这是发现activimq启动不了,查看启动日志,发现报错信息:

技术分享

这是再加入commons-dbcp-1.2.jar包,再启动,还是启动不了,再查看启动日志,发现报错信息:

技术分享

再加入commons-pool.jar包,再启动,这是启动正常了,发现数据库多了三张表:

技术分享

发送五条下次进行测试,这时并没有接收,发现多了五条数据

技术分享

当消息接收之后,这五条记录消失

技术分享

遗留问题:

当消费者消息接收完之后重启activimq,这时生产者重新发送消息,一切都正常

但是如果消费者消息没有接收完就重启的话,生产者就不能继续发送消息,消费者也不能接收任何消息,包括之前遗留的

以上是关于activimq消息队列持久化配置的主要内容,如果未能解决你的问题,请参考以下文章

springboot整合activiMQ

ActiviMQ

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段

消息队列实现复制的最佳实践

java消息队列是怎么实现数据持久化的

RabbitMQ(消息队列,消息中间件)