1. ActiveMq 客户端
<!-- 自定义 -->
<bean id="jmsTopicReceive" class="com.pinganfu.paff.runtime.jms.receive.JmsReceiver">
<property name="connectionFactory" ref="jmsFactoryReceive" />
<!-- 指定发送的主题 -->
<property name="destinationName" value="paff.topic" />
<!-- 主题还是队列 -->
<property name="pubSubDomain" value="true" />
<!-- 异步接受回调 方法 -->
<property name="messageListener">
<bean class="com.pinganfu.paff.runtime.jms.MyJmsReceiverListener" />
</property>
<!-- 持久化订阅 配置-->
<property name="subscriptionDurable" value="true"></property>
<property name="clientId" value="connection.system002" />
<property name="durableSubscriptionName" value="subscriptionName.system002"></property>
</bean>
2
修改 clientId 与 durableSubscriptionName的值,每次启动
都会在ActiveMq实列注册持久定阅者,通过控制台可以看到多个持久订阅者,如图
数据库中表记录如下select * from ACTIVEMQ_ACKS
可获知持久的订阅者保存在数据库中ACTIVEMQ_ACKS表中,
其中最重要的一个字段LAST_ACKED_ID中值为,对应表中的ACTIVEMQ_MSGS中的ID值。
在新建持久订阅时者时,LAST_ACKED_ID中的值为ACTIVEMQ_MSGS表中最大ID值。
当此订阅者为在线状态时,会消费主题消息,当消费完成时,LAST_ACKED_ID 又会更新为烊ACTIVEMQ_MSG表中类型为topic消息的最大ID值
LAST_ACKED_ID,相当于每个持久订阅者消费到消息的最大值。
2. 当每个持久订阅者把所有消息消费完成时,数据库中的记录并没有删除。Aactive默认策略是每隔5分钟清除没有用的消息。
可以通过jdbcPersistenceAdapter中属性中cleanupPeriod来改变清除间隔时间
持久化表结构说明:
当在启动ActiveMQ时,先判断表是否存在,如果不存在,将去创建表,如下:
(1)ACTIVEMQ_ACKS:持久订阅者列表
1.CONTAINER:类型://主题
如:topic://basicInfo.topic
2.SUB_DEST:应该是描述,与1内容相同
3.CLIENT_ID:持久订阅者的标志ID,必须唯一
4.SUB_NAME:持久订阅者的名称.(durableSubscriptionName)
5.SELECTOR:消息选择器,consumer可以选择自己想要的
6.LAST_ACKED_ID:最后一次确认ID,这个字段存的该该订阅者最后一次收到的消息的ID
(2)ACTIVEMQ_LOCK:进行数据访问的排斥锁
1.ID:值为1
2.TIME:时间
3.BROKER_NAME:broker的名称
这个表似为集群使用,但现在ActiveMQ并不能共享数据库.
(3)ACTIVEMQ_MSGS:存储Queue和Topic消息的表
1.ID:消息的ID
2.CONTAINER: 类型://主题
如:queue://my.queue
Topic://basicInfo.topic
3.MSGID_PROD:发送消息者的标志
MSGID_PROD =ID:[computerName][…..]
注意computerName,不要使用中文,消息对象中会存储这个部分,解析connectID时会出现Bad String错误.
4.MSGID_SEQ:还不知用处
5.EXPIRATION:到期时间.
6.MSG:消息本身,Blob类型.
可以在JmsTemplate发送配置中,加上<property name=”timeToLive” value=”432000000”/>,5天的生命期,如果消息一直没有被处理,消息会被删除,但是表中会存在CONTAINER为queue://ActiveMQ.DLQ的记录.也就是说,相当于将过期的消息发给了一个ActiveMQ自定义的删除队列..
<二>关于ActiveMQ的持久订阅消息删除操作
1.主题消息只有一条,所有订阅了这个消息的持久订阅者都要收到消息,只有所有订阅者收到消息并确认(Acknowledge)之后.才会删除.
说明:ActiveMQ支持批量(optimizeAcknowledge为true)确认,以提高性能
2.ActiveMQ执行删除Topic消息的cleanup()操作的时间间隔为5 minutes..
设置activemq 持久化 activemq持久化订阅
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
activemq 配置取消持久化 activemq删除持久化订阅
ActiveMQ持久化配置1 概述ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。ActiveMQ使用Apache提供的授权,任何人都可以对其实现代码进行修改。ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。Acti
activemq 配置取消持久化 ActiveMQ ActiveMQ持久化 持久化 ActiveMQ数据保存 -
activemq 消费端持久订阅 activemq 持久化配置
info:当前的版本为apache-activemq-5.15.0 为保证消息系统的可靠性,保证消息中心宕机等不影响消息的发送,ActiceMQ提供四种持久化机制。在ActiveMQ安装目录下的conf/activemq.xml是一个spring的配置文件,在<broker>下有<per
activemq 消费端持久订阅 ActiveMQ持久化机制 kahaDB LevelDB 持久化 -
es启动报不能创建java虚拟机
1、人机交互的方式2、常见的DOS命令3、Java语言概述4、安装JDK5、掌握编写并编译第一个Java应用程序6、环境变量的配置7、了解Java的运行机制(二)、计算机软件及其人机交互的方式1、什么是软件?软件是计算机程序、程序所用的数据以及有关文档资料的集合系统软件:DOS、Windows、Linux等应用软件:扫雷、迅雷、QQ等2、人机交互软件的出现实现了人与计算机的更好的交互人机交互的方
es启动报不能创建java虚拟机 eclipse无法创建java虚拟机 java扫雷 java控制台清屏 Java