我正在使用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,或者如果您有骆驼的副本在动作书中(第一或第二版),则它具有一个完全致力于交易的章节。