我有两个微型服务A和B。
一项服务是向卡夫卡主题“A-主题”发送信息。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注释。
在成功场景中,数据被持久化,成功消息仅被发布到主题一次。
何地as
在失败场景中,数据库保存由于完整性约束冲突问题而失败。在这种情况下,失败信息连续10次发布给卡夫卡。
如果我从服务类中删除事务注释,那么消息在失败场景中也只发布一次。
我不明白,为什么事务性注释会导致这条消息被发布10次给kafka。
请让我知道你的意见。
提前谢谢。
发布于 2022-06-23 17:23:38
默认的错误处理程序将尝试交付10次;您需要在侦听器容器中启用Kafka事务,因此kafka发送的内容将被回滚( B-Topic上的使用者需要isolation.level=read_committed)。
https://docs.spring.io/spring-kafka/docs/current/reference/html/#transactions
https://stackoverflow.com/questions/72733797
复制相似问题