【发布时间】:2021-04-11 06:19:45
【问题描述】:
我的 Spring Boot (WebFlux/R2DBC/Reactor Kafka) 应用程序中有以下使用者
@EventListener(ApplicationStartedEvent::class)
fun onMyEvent() {
kafkaReceiver
.receive()
.doOnNext { record ->
val myEvent = record.value()
myService.deleteSomethingFromDbById(myEvent.myId)
.thenEmpty {
record.receiverOffset().acknowledge()
}.subscribe()
}
.subscribe()
}
我想为 Kafka 和 DB 事务添加事务同步。阅读文档和一些 stakoverflow 问题后
- Transaction Synchronization in spring boot with Database+ kafka example
- Spring Kafka ChainedKafkaTransactionManager doesn't synchronize with JPA Spring-data transaction
- Transaction Synchronization in Spring Kafka
- Spring @Transactional with a transaction across multiple data sources
似乎ChainedKafkaTransactionManager 将是要走的路。
但以下代码将无法工作,因为 ChainedKafkaTransactionManager 需要 PlatformTransactionManager 类型的事务管理器。所以不接受参数r2dbcTransactionManager。
@Bean(name = ["chainedTransactionManager"])
fun chainedTransactionManager(
r2dbcTransactionManager: R2dbcTransactionManager,
kafkaTransactionManager: KafkaTransactionManager<*, *>
) = ChainedKafkaTransactionManager(kafkaTransactionManager, r2dbcTransactionManager)
还有其他方法可以实现吗?
【问题讨论】:
标签: spring-webflux project-reactor r2dbc reactive-kafka reactor-kafka