我有一个spring集成流程,其中处理器(已调度)按顺序从队列(jms)读取消息并尝试处理。如果处理器发现在另一个事件完成之前无法处理该消息,则它会将消息发送回原始队列并稍后尝试处理。
如果它只是继续发送无法处理的消息,则返回队列,它会创建一个无限循环。
所以我需要抓住它们,直到我读完已经存在的队列中的所有消息。在将所有现有消息发送到队列之前,在读取所有现有消息时触发释放。我该怎么做?
请注意,我不想聚合消息,只是暂时保留它们,并以某种方式。另请注意,我的处理器计划读取消息(不是消息驱动)。
答案 0 :(得分:1)
在这种情况下,您必须先确认队列中的这些消息,然后使用JmsTemplate
(或JmsSendingMessageHandler
)将其重新发送给它。
带有dequeue的功能,将失败的消息返回到队列的头部。这就是你一次又一次地看到它并且没有到达其他消息的方式(也可以用并发性来做到这一点)。
如果发生故障重新发送回队列,则将它们放在队列的尾部。因此,在处理其他现有消息之后,“坏”消息将在稍后可用。