spring-cloud-stream生产者交易

时间:2016-06-10 21:19:06

标签: spring-cloud-stream

我已经使用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活页夹?

1 个答案:

答案 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) {

       }
});

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