我已经使用kafka活页夹进行了一些测试,看起来春天的云流生产商并没有参与春季管理的交易。
给出像
这样的代码@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活页夹?
答案 0 :(得分:3)
Kafka活页夹不是交易活动,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) {
}
});