【问题标题】:Using JMS transaction across inbound and outbound queues跨入站和出站队列使用 JMS 事务
【发布时间】:2014-11-09 05:52:01
【问题描述】:

我正在使用 Spring Integration 从队列中读取消息并将其写入多个队列。在 any 失败的情况下,我希望将消息写入失败队列,并且任何输出队列都不应该收到该消息。为此,我该如何设置我的交易?我在入站和 jms 出站通道适配器上使用消息驱动通道适配器。我正在使用拆分器来创建提供给 jms 出站通道适配器的多条消息(基于输出队列的数量)。 该流程将作为独立的 Java 应用程序运行。

谢谢。

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    您可以使用 JMS 来实现:

    1. 您应该为入站queue 配置redelivery 策略到0
    2. 并为此提供DLQ

    在这种情况下,在 TX 回滚时,您的消息将不会再次发送给您的听众,只会发送到 DLQ

    在 JMS 规范中查看更多信息。

    更新

    根据 Gary 的建议解决方案:https://gist.github.com/artembilan/e7aff2afbf4ff4308159

    【讨论】:

    • 正如@Artem 所说,使用 DLQ 要简单得多。但是,如果您真的想在 Spring Integration 中执行此操作,可以这样做 - 在拆分器之前启动一个新事务(在拆分器的输入通道上使用事务网关或事务建议/拦截器 - 如果它是直接的)。通过传播REQUIRES_NEW,将启动一个新事务。然后,在消息驱动的通道适配器上放一个错误通道;处理错误(写入错误队列)。
    • 添加了指向答案的 Gist 链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多