队列消息持久化之JDBC
1、 配置activemq.xml文件,修改持久化方式为jdbc
<persistenceAdapter> <!--<kahaDB directory="${activemq.data}/kahadb"/>--> <jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="false" /> </persistenceAdapter>
createTablesOnStartup默认为true,一般第一次启动时设置为true,后面设置为false
2、在broker外配置数据库连接bean
<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/activemq?relaxAutoCommit=true"/> <property name="username" value="root"/> <property name="password" value="root"/> <property name="maxActive" value="200"/> <property name="poolPreparedStatements" value="true"/> </bean>
3、启动服务,可以看到数据库中多了3张表,表明配置成功
4、运行Producer,模拟生产者发送消息
控制台输出:
Activemq管理控制台:
数据库表中:
5、关闭服务并重启,模拟服务器宕机
重启后Activemq管理控制台:
打开消费端:
数据库中数据被清除
6、ActiveMQ设置消息的有效期
在上述的Producer类中,将消息的有效期设置为2分钟,若这条消息发送到了ActiveMQ消息中间件但一直未被消费,直到2分钟的时间到,消息则过期。
//messageProducer.send(textMessage); ///第3个参数:是否持久化;第4个参数:优先级(0~4普通 5~9加急);第5个参数:消息在ActiveMQ中间件中存放的有效期 messageProducer.send(destination,textMessage,DeliveryMode.PERSISTENT,4,2*60*1000); System.out.println("发送消息" + i);
执行Producer,但是不执行Consumer。
Activemq管理控制台:
数据库表中:
2分钟后:
原文地址:https://www.cnblogs.com/keleaiww/p/11168962.html
时间: 2024-10-09 22:49:18