消息驱动模式下,throw Exception如何保证事务性
来源:7-12 并发时的错误处理

RockCrazy
2019-01-27
老师, 消息驱动,是在每个模块中,通过消息中间件和数据库事务的同步,达到在本模块中,读写消息和数据库操作之间的事务性.但是如果遇到在业务逻辑中需要抛异常的情况下,如何处理.是使用全局异常处理然后分发到失败队列中? 但是这样在异常处理时,发送消息这个消息还能保证和之前发生异常的操作在一个事务里吗,如果不是在一个事务里,那是不是就有可能出现数据不一致的情况啊?
写回答
1回答
-
大漠风
2019-01-29
不用把问题想的这么复杂,也不要想着用这么复杂的方式解决问题,这样只会让系统变得不可维护。
在一个事务上下文(也就是一个方法内,或一个代码块)中,消息的事务会随着数据库的事务提交,如果出错了,自然也会回滚,不管是什么异常,只要你没有在方法里面把它吞掉。如果这个方法是JmsListener触发的,读消息的事务也会回滚,消息会被放回消息队列,重新触发该方法。直到重试多次后发到死信队列。
00
相似问题