如果消费消息的事务回滚了

来源:4-6 Jms-spring事务实例

崇拜者_

2020-09-17

老师请教一下,假设消费这条消息的时候一直报错回滚,是不是会不断消费这条消息,队列里后面的消息都会被阻塞住消费不了,如果是的话该怎么办

写回答

1回答

大漠风

2020-09-23

这个问题需要区分具体使用的消息引擎。

  1. 如果出错,不同的引擎处理方式不一样,如ActiveMQ默认就会重试7次,而Kafka就不会,而是直接报异常。不管怎样,我们都应该对错误进行处理,例如先尝试重试,再尝试进行回滚,再记录错误日志,以便排查问题,看是业务问题,还是程序的bug问题。

  2. 不同的消息引擎,消费消息的实现也不一样,ActiveMQ通过Listener订阅的时候,可以设置多线程并发。就算出错重试也不会一直重试。而Kafka就不允许在多线程中使用一个consumer处理消息。你要想多线程,只能用consumer读取到一批数据以后,再分配给处理的线程池去处理。但是不管怎样,kafka在出错的时候会报错,也就不会有阻塞一说。

0
1
崇拜者_
非常感谢!
2020-10-01
共1条回复

分布式事务实践,从原理到实例,解决数据一致性

掌握分布式事务实现技术,是架构师必备技能。

1149 学习 · 153 问题

查看课程