我对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呼叫被回滚,但卡夫卡消息仍被发送。如果在客户事件上有一个使用者将客户插入数据仓库,数据仓库和记录系统将在传输回滚时不同步。这里有办法让卡夫卡的活页夹交易吗?
发布于 2016-06-10 21:43:40
卡夫卡的活页夹不是交易,卡夫卡一般不支持交易。
我们确实打算解决SpringCloudStream1.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
https://stackoverflow.com/questions/37757313
复制相似问题