【问题标题】:Spring Integration - Design - Prevent Infinite Processing LoopSpring Integration - 设计 - 防止无限处理循环
【发布时间】:2017-07-13 18:39:23
【问题描述】:

我有一个 spring 集成流程,其中处理器(计划)顺序地从队列 (jms) 中读取消息并尝试处理。如果处理器发现在另一个事件完成之前无法处理消息,它会将消息发送回原始队列并稍后尝试处理。

如果它只是继续发送无法处理的消息,返回队列,它会创建一个无限循环。

所以我需要保留它们,直到我读完队列中已经存在的所有消息。并在读取所有现有消息时触发释放,然后将它们发送到队列。我该怎么做?

请注意,我不想汇总消息,而只是暂时保留它们,并且以某种方式。另请注意,我的处理器计划读取消息(不是消息驱动的)。

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    在这种情况下,无论如何您都必须确认队列中的这些消息,然后使用JmsTemplate(或JmsSendingMessageHandler)将它们重新发送回队列。

    具有出队功能,将失败的消息返回到队列的头部。这就是您一次又一次地看到它而不到达其他消息的方式(您也可以通过并发来做到这一点)。

    在失败的情况下重新发送消息返回队列,您将它们放在队列的尾部。因此,在处理其他现有消息之后,“坏”消息将在以后可用。

    【讨论】:

    • 您还可以将它们发布到不同的队列,并定期运行任务将它们移回原始队列。
    • 没错,我就是这么做的。只需在 temp Q 中同步保存不可处理的消息,当我完成批处理后,启动另一个任务,将它们移回保存 Q。谢谢你们俩的输入,一如既往。
    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多