我有一个关于 JMS 和 Spring Integration 的问题。
我有 3 个队列,我们称它们为 QUEUE_SOURCE、QUEUE_TARGET 和 QUEUE_ERROR。DefaultMessageListenerContainer 用于从 QUEUE_SOURCE 读取消息。
我已经为这些队列配置了一个 JMS 事务管理器。
当我从 QUEUE_SOURCE 读取,但将消息发布到 QUEUE_TARGET 时发生错误,我可以看到消息在引发异常之前重试了几次,从而触发了回滚。
我猜会发生什么:
1) 启动事务 2) 读取消息 3) 尝试在目标队列 QUEUE_TARGET 上发布消息,但失败 4) 由于错误不提交,因此消息不会从 QUEUE_SOURCE 中删除
或者
1) 开始事务 2) 读取消息 3) 从 QUEUE_SOURCE 中删除消息 4) 尝试在目标队列 QUEUE_TARGET 上发布消息,但失败 5) 将消息放回 QUEUE_SOURCE
在所有重新交付失败后,将触发回滚。
但是,在此回滚期间发生的事情让我感到困惑。我不知道消息在哪里结束,它肯定不会出现在源队列中,也不会出现在错误队列中。那么在回滚期间到底发生了什么?