gpt4 book ai didi

java - 传入 JMS 消息的事务同步未激活

转载 作者:行者123 更新时间:2023-11-30 10:25:22 27 4
gpt4 key购买 nike

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

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

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

问题:来自 Camel 的传入交易不同步,我正在获取

java.lang.IllegalStateException: Transaction synchronization is not active

我尝试调用 transactionsynchronizationmanager.initsynchronization() - 我没有收到任何异常,但从未调用过 afterCommit() 方法。

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

当通过 spring mvc Controller (通过 Spring Transaction)收到请求时,相同的代码正在运行。

最佳答案

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

因此,在您的 Camel route ,还要设置 spring 事务,例如

from jms
transacted

在 Camel 文档中查看更多详细信息:http://camel.apache.org/transactional-client.html如果你有一本 Camel in Action 书(第 1 版或第 2 版),甚至更好,那么它有一整章专门介绍交易。

关于java - 传入 JMS 消息的事务同步未激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46267919/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com