【发布时间】:2018-05-01 11:01:05
【问题描述】:
我想将 kafka 事务与存储库事务同步:
@Transactional
public void syncTransaction(){
myRepository.save(someObject)
kafkaTemplate.send(someEvent)
}
由于合并 (https://github.com/spring-projects/spring-kafka/issues/373) 并且根据文档,这是可能的。不过,我在理解和实现该功能时遇到了问题。 查看https://docs.spring.io/spring-kafka/reference/html/#transaction-synchronization 中的示例,我必须创建一个 MessageListenerContainer 来监听我自己的事件。 我还需要使用 KafkaTemplate 发送我的事件吗? MessageListenerContainer 是否禁止发送给 broker?
如果我理解正确,kafkaTemplate 和 kafkaTransactionManager 必须使用相同的 producerFactory,我必须在其中启用 Transaction 设置 transactionIdPrefix。在我的示例中,我必须将 messageListenerContainer 的 TransactionManager 设置为 DataSourceTransactionManager。对吗?
从我的角度来看,我通过 kafkaTemplate 发送事件看起来很奇怪,监听我自己的事件并再次使用 kafkaTemplate 转发事件。
如果我能获得一个简单的 kafka 事务与存储库事务同步的示例和解释,我真的会帮助我。
【问题讨论】:
标签: spring-transactions spring-kafka