快速上手MQ之activeMQ(4)--消息持久化
来源:互联网 发布:日本手办产业数据 编辑:程序博客网 时间:2024/06/07 20:32
消息持久化顾名思义就是把发布的消息进行落地,这样activeMQ宕机也不会导致那些未被消费的消息给弄消失,这样保证消息都能被消费。
activeMQ消息持久化有JDBC,AMQ,KahaDB和LevelDB等这几种,默认采用的是KahaDB,本篇讲的是如何采用jdbc的新式把消息存入数据库的例子;
activeMQ默认采用的KahaDB,消息会落地到安装目录下的\data\kahadb这个目录下
下面讲讲如何用jdbc进行消息持久化到数据库
1.修改activemq.xml配置
这里修改的activemq.xml文件是activemq安装目录下的conf/activemq.xml文件,与我们的项目无关
修改内容:
1.1注释掉broker下的默认持久化方式:
<persistenceAdapter> <kahaDB directory="${activemq.data}/kahadb"/> </persistenceAdapter>1.2在之下添加如下内容:
<persistenceAdapter> <jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#derby-ds"/> </persistenceAdapter>
1.3在broker外添加如下内容:
<bean id="derby-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/activemq?relaxAutoCommit=true"/> <property name="username" value="root"/> <property name="password" value=""/> <property name="maxActive" value="200"/> <property name="poolPreparedStatements" value="true"/> </bean>
注意:这里用到了连接池以及mysql所以需要的包有:commons-dbcp-1.4.jar;commons-pool-1.5.4.jar;mysql-connector-java-5.1.22.jar这三个包
我的数据库名activemq
2.下载及拷贝需要的jar把1.3所说需要的jar拷贝到安装目录下的/lib目录下即可
3.重启activemq
启动之后activemq库里面会生成3张表
1)activemq_acks:用于存储订阅关系。如果是持久化Topic,订阅者和服务器的订阅关系在这个表保存,主要数据库字段如下:
container:消息的destination
sub_dest:如果是使用static集群,这个字段会有集群其他系统的信息
client_id:每个订阅者都必须有一个唯一的客户端id用以区分
sub_name:订阅者名称
selector:选择器,可以选择只消费满足条件的消息。条件可以用自定义属性实现,可支持多属性and和or操作
last_acked_id:记录消费过的消息的id
2)activemq_lock:在集群环境中才有用,只有一个Broker可以获得消息,称为Master Broker,其他的只能作为备份等待Master Broker不可用,才可能成为下一个Master Broker。这个表用于记录哪个Broker是当前的Master Broker。
3)activemq_msgs:用于存储消息,Queue和Topic都存储在这个表中。主要的数据库字段如下:
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,订阅者和服务器的订阅关系在这个表保存。
注意:消息持久化的所有修改都与项目无关,都是直接操作安装目录下的文件
4.启动我们之前做的activeMQ项目
4.1访问http://localhost:8080/activeMQ/activeMQ/main,发布queue消息
4.2查看数据表activemq_msgs,会生成一条数据
4.3如果我们发布的是topic消息的话,查看activemq_acks表会有订阅者的关系信息:
activemq_msgs表信息:
4.4消费消息,访问http://localhost:8080/activeMQ/activeMQ/receive
activemq_msgs生成的一条数据将消失
5.ok这样也就算完成消息的持久化了
- 快速上手MQ之activeMQ(4)--消息持久化
- 快速上手MQ之activeMQ(1)--Demo
- 快速上手MQ之activeMQ(2)--spring整合
- 快速上手MQ之activeMQ(3)--订阅者模式
- MQ持久化消息
- ActiveMQ之消息持久化方式
- JMS之activemq消息持久化
- ActiveMq持久化消息
- ActiveMQ持久化消息
- ActiveMQ -- 消息持久化
- ActiveMQ消息持久化
- 消息中间件-activemq实战之消息持久化(六)
- JMS之——ActiveMQ消息持久化
- 3、ActiveMQ学习记录 之 消息持久化
- ActiveMQ入门到精通4-消息持久化到Mysql
- ActiveMQ快速上手
- activemq+spring 持久化发送消息
- MQTT下ActiveMQ的消息持久化
- 抓包
- sql server2008密钥
- Map集合中value()、keySet()和entrySet()以及性能的分析
- JavaScript问题与总结
- 正确修改MAC用户名
- 快速上手MQ之activeMQ(4)--消息持久化
- 西门子plc s7-200 读取plc内部时间的方法详解
- 有品css样式进度
- Tomcat 集群配置1
- [Excel]excel如何设置输入数字后单元格自动填充颜色
- java注解
- java 传值方式集合与非集合的区别
- 关于近期博客更新缓慢
- openvswitch vlan port 模式解析