问题描述:java
1.消费者实现JMS的消息监听接口javax.jms.MessageListener,项目启动时启动MQ消费者session
2.消息确认机制使用ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE。ide
3.在执行onMessage()后,没有显式的确认消息,消息没有从消息队列中删除spa
4.问题来了,没有显式确认的消息永久留在消息队列中,不会再次被读取接口
缘由分析:队列
1.MQ消息确认超时机制(发送消息,等待半小时,开启MQ消费者消息被消费)消息队列
2.MQ消息重发次数超过上限,再也不重发(经过打印,发现MQ消息里面带有一个参数,记录的重发次数,新启动一个消费者,屡次重发的消息成功被消费)it
3.怀疑MQ消费者对读取过的消息进行标识了的,从新启动消费者,没有消费的消息能成功被消费io
结论:class
MQ的session会标记读取过的消息,从新建立session便可。