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
















