【发布时间】:2021-10-27 23:00:11
【问题描述】:
目前,我有一个配置了 ConcurrentKafkaListenerContainerFactory 和 SeekToCurrentErrorHandler 的 Kafka 侦听器(DeadLetterPublishingRecoverer 配置了 1 次重试)。
我的 Listener 方法用 @Transactional 注释(以及我的服务中与数据库交互的所有方法)。
我的 Listener 方法执行以下操作:
- 从 Kafka 接收消息
- 与多个服务交互,将接收到的数据的不同部分保存到数据库中
- Kafka 中的确认消息(即提交偏移量)
如果它在中间的某个地方失败,它应该回滚并重试,直到最大重试次数。 然后向 DLT 发送消息。
我正在尝试使此方法完全具有事务性,即,如果出现故障,所有以前的更改都会回滚。
但是,Listener 方法中的@Transactional 注解是不够的。
我怎样才能做到这一点?
我应该采用哪些配置来使 Listener 方法完全事务化?
【问题讨论】: