传入的JMS消息的事务同步不活动

时间:2017-09-17 19:15:07

标签: java spring apache-camel spring-transactions spring-jms

我正在使用Apache Camel向我的Java服务发送消息。我已将transacted=true保留在消费者路线上。我还需要在成功处理JMS消息时发送电子邮件。

我使用以下代码注册同步并仅在提交交易后发送电子邮件。

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter(){
     @Override
     public void afterCommit(){
         sendMail(mailBody); 
     }
});

问题:来自Camel的传入事务未同步,我正在

  

java.lang.IllegalStateException:事务同步未激活

我尝试调用transactionsynchronizationmanager.initsynchronization() - 我没有得到任何异常,但永远不会调用afterCommit()方法。

transactionsynchronizationmanager.initsynchronization();
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter(){
     @Override
     public void afterCommit(){
         sendMail(mailBody); //never called
     }
});

当通过spring mvc controller(通过Spring Transaction)收到请求时,相同的代码正在工作。

1 个答案:

答案 0 :(得分:1)

您可能需要在路线上启用交易以启用春季交易。 JMS端点上的选项transacted=true不是spring-transaction,但它仅用于将JMS确认模式设置为事务处理。它们不一样。

因此,在您的Camel路线中,也设置弹簧交易,例如

from jms
  transacted

在Camel文档中查看更多详细信息:http://camel.apache.org/transactional-client.html或者如果您有一本Camel in Action手册(第1版或第2版)的更多内容,那么它会有一个专门讨论交易的完整章节。