Spring Kafka事务提交序列



我有两个服务。User调用Service-A的REST端点,该端点进行处理,在数据库中创建记录/条目,然后发送Kafka事件以便Service-B可以被消费。

我已经标注了@Transactional,以便数据库提交和Kafka提交同时发生。

Service-B将接收Kafka事件,处理,并将更新后的事件发送回Service-A。

在这种情况下,我看到某些更新在Service-A中失败,说明没有找到记录/条目。是Race条件吗?

作为ChainedKafkaTransactionManager已弃用,我如何确保数据库提交首先发生,然后Kafka提交?

"对于生产者发起的事务,通过事务同步,Kafka提交也将在DB之后发生。"来自Gary Russell

在我的场景中,由于事务不是由Kafka发起的,我如何逆转提交?

@Transactional("dstm")
public void someMethod(String in) {
Employee employee = this.repository.save(new Employee(in));
if(employee.isSomeCondition()) {
sendToKafka(employee);
}
}

实际上这里有一个很好的例子,您可以如何配置多个数据源的事务处理:https://docs.spring.io/spring-kafka/docs/current/reference/html/#ex-jdbc-sync

另一个可能导致该问题的问题是使用者的隔离级别。你把它改成read_committed了吗?

最新更新