【发布时间】:2014-11-09 05:52:01
【问题描述】:
我正在使用 Spring Integration 从队列中读取消息并将其写入多个队列。在 any 失败的情况下,我希望将消息写入失败队列,并且任何输出队列都不应该收到该消息。为此,我该如何设置我的交易?我在入站和 jms 出站通道适配器上使用消息驱动通道适配器。我正在使用拆分器来创建提供给 jms 出站通道适配器的多条消息(基于输出队列的数量)。 该流程将作为独立的 Java 应用程序运行。
谢谢。
【问题讨论】:
我正在使用 Spring Integration 从队列中读取消息并将其写入多个队列。在 any 失败的情况下,我希望将消息写入失败队列,并且任何输出队列都不应该收到该消息。为此,我该如何设置我的交易?我在入站和 jms 出站通道适配器上使用消息驱动通道适配器。我正在使用拆分器来创建提供给 jms 出站通道适配器的多条消息(基于输出队列的数量)。 该流程将作为独立的 Java 应用程序运行。
谢谢。
【问题讨论】:
您可以使用 JMS 来实现:
queue 配置redelivery 策略到0
DLQ。在这种情况下,在 TX 回滚时,您的消息将不会再次发送给您的听众,只会发送到 DLQ。
在 JMS 规范中查看更多信息。
更新
根据 Gary 的建议解决方案:https://gist.github.com/artembilan/e7aff2afbf4ff4308159
【讨论】:
REQUIRES_NEW,将启动一个新事务。然后,在消息驱动的通道适配器上放一个错误通道;处理错误(写入错误队列)。