【发布时间】:2021-10-31 06:50:57
【问题描述】:
我有两个服务。用户调用 Service-A 的 REST 端点,该端点进行处理,在数据库中创建记录/条目,然后发送 Kafka 事件以便使用 Service-B。
我已经使用@Transactional 进行了注释,以便数据库提交和Kafka 提交同时发生。
Service-B 将接收 Kafka 事件,处理,并将更新后的事件发送回 Service-A。
在这种情况下,我看到 Service-A 中的某些更新失败,表明找不到记录/条目。是竞赛条件吗?
由于ChainedKafkaTransactionManager 已被弃用,我如何确保首先发生数据库提交,然后是 Kafka 提交?
“对于生产者发起的事务,随着事务同步,Kafka提交也会发生在DB之后。”来自加里·拉塞尔
在我的场景中,由于事务不是由 Kafka 发起的,我该如何撤销提交?
@Transactional("dstm")
public void someMethod(String in) {
Employee employee = this.repository.save(new Employee(in));
if(employee.isSomeCondition()) {
sendToKafka(employee);
}
}
【问题讨论】:
标签: spring-kafka spring-transactions