ActiveMQ整合MySQL实现消息持久化教程

1. 需要下载mysql的驱动包, 放置于ActiveMQ内的lib文件夹中.

驱动包链接:

链接:https://pan.baidu.com/s/1ImrTBa7uZSilnHlYNy2h3g 
提取码:e58j 

2. 找到activemq的配置文件activemq.xml . 配置文件位于ActiveMQ内的conf文件夹中.

apache-activemq-5.15.15\conf\activemq.xml

3. 修改activemq.xml中的两处配置.

(1)注释掉原先自带的KahaDB数据库,增加jdbc数据库配置

<!--注释掉KahaDB
<persistenceAdapter>
    <kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>-->
		
<!--使用jdbc-->
<persistenceAdapter>
    <jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="true"/>
</persistenceAdapter>

注意: createTablesOnStartup意为在启动的时候创建所需表, 这个属性在第一次启动的时候设置为true, 之后设置为false,否则第二次启动会报错.

(2)添加MySQL的连接相关配置,注意此段代码的位置是位于 </broker>标签之后, 另外如果mysql是在本地安装的话,地址中最好是使用127.0.0.1而不是localhost, 避免在地址解析时出现问题.

</broker>	
	
<bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/activemq?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;relaxAutoCommit=true"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
    <property name="poolPreparedStatements" value="true"/>
</bean>

3. 配置文件修改完成后, Linux可按照之前的方式启动, win系统的话,不可以直接启动bin目录, bin/win64或者bin/win32目录下的activemq.bat文件, 会启动失败并报出BeanFactory创建失败的错误, 需要进入到bin目录,使用cmd 打开控制台窗口, 执行 activemq start 命令,如此可正常启动ActiveMQ.

打开浏览器,访问 localhost:8161, 输入用户名和密码 admin/admin,检测ActiveMQ是否已启动.

4. 打开数据库可视化工具, 找到activemq使用的数据库,可以看到已经创建了三张表. 此时可修改配置文件中的createTablesOnStartup,将值改为false.

ACTIVEMQ_MSGS, 消息表,

ID: 自增的主键
CONTAINER: 消息的Destination
MSGID_PROD: 消息发送者的主键
MSG_SEQ: 发送消息的顺序,MSGID_PROD+MSG_SEQ可以组成JMS的MessageID
EXPIRATION: 消息过期时间,存储的是1970-01-01到现在的毫秒数
MSG: 消息本体的Java序列化对象的二进制数据
PRIORITY: 优先级,从0-9.数值越大优先级越高

ACTIVEMQ_ACKS, 签收表,

用于存储订阅关系.如果是持久化Topic, 订阅者和服务器的订阅关系在这个表保存.
CONTAINER: 消息的Destination
SUB_DEST: 如果是使用Static集群,这个字段就会有集群其他系统的信息
CLIENT_ID: 每个订阅者都必须有一个唯一的客户端ID用以区分
SUB_NAME: 订阅者名称
SELECTOR: 选择器,可以选择只消费满足条件的消息.条件可以用自定义属性实现,可支持多属性AND和OR操作
LAST_ACKED_ID: 记录消费过的消息的ID.

ACTIVEMQ_LOCK, 锁定表,

在集群环境中才有用,只有一个Broker可以获得消息,成为Master Broker,其他的只能作为备份等待Maser Broker不可用,才能成为下一个Master Broker.这个表记录哪个Broker是当前的Master Broker.

ID
Broker Name

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值