我对 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 消息。如果我有客户事件的消费者将客户插入数据仓库,则数据仓库和记录系统将在事务回滚时不同步。有没有办法让卡夫卡活页夹在这里交易?