Spring Kafka with Spring JPA



我有两个微服务A和b。

一个服务正在发送消息给Kafka主题"A- topic"。B服务正在消费该消息。

在B服务中,kafka监听器将执行以下步骤
1. Persist the data in the database     (repo.save(entity))
2. Publish the response message to "B-Topic".   (kafkatemplte.send("B-Topic",message))

我在两个服务的服务级别使用Spring @Transactional注释。

在成功场景中,数据被持久化,成功消息只发布到主题一次

,

在Failure场景中,由于完整性约束违反问题,数据库保存失败。在这种情况下,失败消息被连续发布到Kafka 10次。

如果我从服务类中删除事务性注释,那么消息也只在失败场景中发布一次。

我不明白,为什么事务性注释会导致消息被发布10次到kafka。

请让我知道你的意见。

提前感谢。

默认错误处理程序将尝试传递10次;你需要在侦听器容器中启用Kafka事务,这样Kafka的发送将被回滚(并且B-Topic上的消费者需要isolation.level=read_committed)。

https://docs.spring.io/spring-kafka/docs/current/reference/html/事务