一些Spring JMS问题

时间:2013-06-27 14:47:21

标签: spring-integration spring-jms

我对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

中删除消息

OR

1)开始交易 2)阅读消息 3)从QUEUE_SOURCE中删除消息 4)尝试在目标队列QUEUE_TARGET上发布消息,但是失败 5)将消息放回QUEUE_SOURCE

在所有重新启动失败后,将触发回滚。

然而,在这次回滚过程中发生的事让我感到困惑。 我不知道消息最终的位置,它肯定不会在源队列上结束,也不会在错误队列中结束。那么这次回滚过程中究竟发生了什么?

1 个答案:

答案 0 :(得分:0)

您需要显示您的确切配置,但您的猜测#1已关闭;代理传递消息但在提交之前不会将其从队列中删除。如果您的代码抛出异常,框架将执行session.rollback()并且代理将重新发送。如果交付成功,框架将提交事务,然后才会删除该消息。