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



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

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

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

问题:骆驼的传入交易没有同步,我得到了

java.lang.illegalstateException:交易同步不活动

我尝试调用transactionsynchronizationmanager.initsynchronization()-我没有任何例外,但是afterCommit()方法从未被调用。

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

通过Spring MVC控制器收到请求时(通过Spring Transaction)正在运行相同的代码。

您可能需要在路线上打开交易以启用弹簧交易。JMS端点上的选项transacted=true不是弹簧交易,而是仅适用于JMS确认模式作为交易设置。他们不一样。

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

from jms
  transacted

在骆驼文档中查看更多详细信息:http://camel.apache.org/transactional-client.html,或者如果您有骆驼的副本在动作书中(第一或第二版),则它具有一个完全致力于交易的章节。

最新更新