如果消费消息的事务回滚了
来源:4-6 Jms-spring事务实例

崇拜者_
2020-09-17
老师请教一下,假设消费这条消息的时候一直报错回滚,是不是会不断消费这条消息,队列里后面的消息都会被阻塞住消费不了,如果是的话该怎么办
写回答
1回答
-
这个问题需要区分具体使用的消息引擎。
如果出错,不同的引擎处理方式不一样,如ActiveMQ默认就会重试7次,而Kafka就不会,而是直接报异常。不管怎样,我们都应该对错误进行处理,例如先尝试重试,再尝试进行回滚,再记录错误日志,以便排查问题,看是业务问题,还是程序的bug问题。
不同的消息引擎,消费消息的实现也不一样,ActiveMQ通过Listener订阅的时候,可以设置多线程并发。就算出错重试也不会一直重试。而Kafka就不允许在多线程中使用一个consumer处理消息。你要想多线程,只能用consumer读取到一批数据以后,再分配给处理的线程池去处理。但是不管怎样,kafka在出错的时候会报错,也就不会有阻塞一说。
012020-10-01
相似问题