gpt4 book ai didi

spring-cloud-stream 生产者交易性

转载 作者:行者123 更新时间:2023-12-04 08:13:33 24 4
gpt4 key购买 nike

我用 kafka binder 做了一些测试,似乎 spring-cloud-stream 生产者不参与 spring 管理的事务。

给定的代码如下

@RequestMapping(method = RequestMethod.POST)
@Transactional
public Customer insertCustomer(@RequestBody Customer customer) {
customerDao.insertCustomer(customer);
source.output().send(MessageBuilder.withPayload(CustomerEventHelper.createSaveEvent(customer)).build());
if (true) {
throw new RuntimeException("rollback test");
}
return customer;
}

customerDao.insertCustomer调用回滚了,但是kafka消息还是发了。如果我在将客户插入数据仓库的客户事件中有一个消费者,则数据仓库和记录系统将在事务回滚时不同步。有没有办法在这里使 kafka Binder 具有事务性?

最佳答案

Kafka binder 不是事务性的,Kafka 一般不支持事务。

我们确实打算解决 Spring Cloud Stream 1.1 的事务管理问题:https://github.com/spring-cloud/spring-cloud-stream/issues/536 .

但是,您甚至可以通过像这样注册事务同步来仅在成功提交后发送消息:

TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronization(){
void afterCommit(){
source.output().send(MessageBuilder.withPayload(event).build());
if (true) {

}
});

参见 http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/support/TransactionSynchronization.html

关于spring-cloud-stream 生产者交易性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37757313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com