我正在使用配置有 jms:message-driven-channel-gateway 的 SI。我的用例是从队列接收消息,通过 JDBC 将其保存到数据库,从队列提交消息,然后让该消息根据其类型继续流经各种渠道。如果消息随后出错,这没关系,因为我将原始信息存储在数据库中,因此可以重播。
我的问题是在数据库持续存在后立即尝试从队列中提交事务。这实际上是中间流程,我只能让 Spring 事务管理在最后尝试并正确提交。这是不合适的,因为如果在数据库持久化之后抛出错误,它仍然会将消息留在 JMS 队列中,因为这是外部事务的起源。
那么,有没有一种简单的方法可以从 JMS 队列中提取消息,保存到数据库,然后将其提交出队列?
谢谢!