我有两个服务。用户调用Service-A的REST端点,后者进行处理,在数据库中创建记录/条目,然后发送Kafka事件,以便可以使用Service-B。
我用@Transactional进行了注解,这样数据库提交和Kafka提交就会同时发生。
服务B将接收Kafka事件,处理并将更新后的事件发送回服务A。
在这种情况下,我发现Service-A中的某些更新失败,说明找不到记录/条目。这是一种竞争条件吗?
由于ChainedKafkaTransactionManager已被弃用,我如何确保先提交数据库,再提交Kafka?
对于生产者启动的事务,在事务同步的情况下,Kafka提交也将在数据库之后发生。来自加里·罗素
在我的场景中,由于事务不是由Kafka发起的,我如何才能反向提交?
@Transactional("dstm")
public void someMethod(String in) {
Employee employee = this.repository.save(new Employee(in));
if(employee.isSomeCondition()) {
sendToKafka(employee);
}
}发布于 2021-09-01 19:17:14
实际上,这里有一个很好的示例,说明如何在几个数据源上配置事务处理:https://docs.spring.io/spring-kafka/docs/current/reference/html/#ex-jdbc-sync
另一个可能导致问题的问题是您的使用者的隔离级别。你把它改成read_committed了吗?
https://stackoverflow.com/questions/69019343
复制相似问题