[spring+AMQ]DefaultMessageListenerContainer设置sessionTransacted为true,异常重试7次后丢弃

DefaultMessageListenerContainer设置了sessionTransacted='true'后。如果抛异常是可以rollback重新放回队列,重新处理的。但是这里有个“限制”。就是重新放回队列 7次 后,第8次就没有重新放回队列中去了(可能直接丢弃,也可能AMQ那边不接收了???)。。与此同时listener就处理后续队列中的message。最终导致的结果是,抛异常的那条message丢失了。
看源码也找不到具体出问题的原因。不知道博主注意到这个问题没有。
附相关代码
1. 接收message的listener:

public class EmailReceiveListener {
private AtomicInteger count = new AtomicInteger(1);
public void receive(Email email){
if (email==null || email.getTitle().contains("3")){
System.out.println("[ERROR][Email]"+email + ";count"+count.getAndIncrement());
throw new RuntimeException("3点必须不能开会!!!");
}else{
System.out.println("[EmailReceiveListener][Email]"+email);
}
}
}

2. 然后是container的配置

<bean id="emailMessageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="converterQueue"/>
<property name="messageListener" ref="emailMessageListenerAdapter"/>
<property name="sessionTransacted" value="true"/>
</bean>

3. 最后是发送的简单例子

public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext-jms-spring.xml"});
context.start();

EmailSender sender3 = (EmailSender)context.getBean("emailSender");
Destination converterQueue = (Destination)context.getBean("converterQueue");

Email email = new Email();
email.setContent("系统服务化");
email.setFrom("小黑手");
email.setSendTo("D team");
for (int i=0;i<10;i++) {
try {
Thread.sleep(Long.valueOf(new Random().nextInt(1000)));
email.setTitle("下午 "+i+" 点开会");
sender3.send(converterQueue,email);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

其他就不贴了。都是正常的。
console打印如下:

[EmailReceiveListener][Email]Email{title='下午 0 点开会', content='系统服务化', sendTo='D team', from='小黑手'}
[EmailReceiveListener][Email]Email{title='下午 1 点开会', content='系统服务化', sendTo='D team', from='小黑手'}
[EmailReceiveListener][Email]Email{title='下午 2 点开会', content='系统服务化', sendTo='D team', from='小黑手'}
[ERROR][Email]Email{title='下午 3 点开会', content='系统服务化', sendTo='D team', from='小黑手'};count1
[ERROR][Email]Email{title='下午 3 点开会', content='系统服务化', sendTo='D team', from='小黑手'};count2
[ERROR][Email]Email{title='下午 3 点开会', content='系统服务化', sendTo='D team', from='小黑手'};count3
[ERROR][Email]Email{title='下午 3 点开会', content='系统服务化', sendTo='D team', from='小黑手'};count4
[ERROR][Email]Email{title='下午 3 点开会', content='系统服务化', sendTo='D team', from='小黑手'};count5
[ERROR][Email]Email{title='下午 3 点开会', content='系统服务化', sendTo='D team', from='小黑手'};count6
[ERROR][Email]Email{title='下午 3 点开会', content='系统服务化', sendTo='D team', from='小黑手'};count7
[EmailReceiveListener][Email]Email{title='下午 4 点开会', content='系统服务化', sendTo='D team', from='小黑手'}
[EmailReceiveListener][Email]Email{title='下午 5 点开会', content='系统服务化', sendTo='D team', from='小黑手'}
[EmailReceiveListener][Email]Email{title='下午 6 点开会', content='系统服务化', sendTo='D team', from='小黑手'}
[EmailReceiveListener][Email]Email{title='下午 7 点开会', content='系统服务化', sendTo='D team', from='小黑手'}
[EmailReceiveListener][Email]Email{title='下午 8 点开会', content='系统服务化', sendTo='D team', from='小黑手'}
[EmailReceiveListener][Email]Email{title='下午 9 点开会', content='系统服务化', sendTo='D team', from='小黑手'}
...全文
2936 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
点滴寸土 2017-05-15
  • 打赏
  • 举报
回复
MQ默认的是有死性队列的,应该是以.DLQ结尾的,就是说 重发7次后,如果没成功,会丢到死性队列里
下一秒地狱 2017-04-07
  • 打赏
  • 举报
回复
不知道楼主解决了没 我也发现了这个问题。。。。很郁闷
【更新至2025年】2001-2025年上市公司数字化转型年报词频统计(吴非、赵宸宇、甄红线)(300+年报词频统计) 1、时间:2001-2025年 2、来源:上市公司年报 3、参考文献:企业数字化转型与资本市场表现——来自股票流动性的经验证据(吴非) 数字化转型如何影响企业全要素生产率(赵宸宇) 知识产权行政保护与企业数字化转型(甄红线) 4、方法说明:(1)参考吴非老师的做法,对人工智能技术、大数据技术、云计算技术、区块链技术、数字技术运用五个维度76个数字化相关词频进行统计 (2)参考赵宸宇老师的做法,对数字技术应用、互联网商业模式、智能制造、现代信息系统四个维度99个数字化相关词频进行统计 (3)参考甄红线老师的做法,对技术分类、组织赋能、数字化应用等类别下139个数字化相关词频进行统计 5、指标:年份、股票代码、公司简称、行业名称、行业代码、全文-文本总长度、仅中英文-文本总长度、人工智能技术-吴、大数据技术-吴、云计算技术-吴、区块链技术-吴、数字技术运用-吴、数字技术应用-赵、互联网商业模式-赵、智能制造-赵、现代信息系统-赵、技术分类-人工智能技术-甄、技术分类-区块链技术-甄、技术分类-云计算技术-甄、技术分类-大数据技术-甄、组织赋能-人工智能技术-甄、组织赋能-云计算技术-甄、组织赋能-大数据技术-甄、组织赋能-广义数字技术-甄、数字化应用-技术创新-甄、数字化应用-流程创新-甄、数字化应用-业务创新-甄、人工智能、商业智能、图像理解、投资决策辅助系统、智能数据分析、智能机器人、机器学习、深度学习、语义搜索、生物识别技术、人脸识别、语音识别、身份验证、自动驾驶、自然语言处理、大数据、数据挖掘、文本挖掘、数据可视化、异构数据、征信、增强现实、混合现实、虚拟现实、云计算、流计算、图计算、内存计算、多方安全计算、类脑计算、绿色计算、认知计算等300+词频

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧