使用 Mule 重新排队 JMS 请求

Posted

技术标签:

【中文标题】使用 Mule 重新排队 JMS 请求【英文标题】:Requeue JMS request with Mule 【发布时间】:2016-05-13 18:57:39 【问题描述】:

我将 JMS component 与 Mule 一起用于带有 ActiveMQ 的队列,我希望如果 请求排队失败,它会返回队列以 重试最后。

我应该在 Anypoint Studio 中配置什么?

【问题讨论】:

嗨,你能说得更清楚点吗?您有一个消费者正在处理一条消息,如果该过程失败,您不想确认该消息并将其留给队列? 对不起,那条失败的消息,再次返回队列,不过是最后一个位置。 【参考方案1】:

仅仅重新排队你的消息听起来不是一个好主意,想象你有一个总是失败的消息,那么在某种意义上这会在尝试处理消息时导致无休止的递归。

听起来您更感兴趣的是Rollback Exception Strategy。有了这个,您可以指定最大重新投递次数,当超过该数量时,您可以将消息放在DLQ(死信队列)或类似的地方,并最好通知某人有关失败的消息。

您可以定义回滚异常策略,以确保在流中引发异常的消息被回滚以进行重新处理。当错误发生在流中时,如果您无法更正错误,请使用回滚异常策略。通常,您使用回滚异常策略来处理涉及事务的流中发生的错误。如果事务失败,即消息在处理过程中抛出异常,则回滚异常策略回滚流中的事务。如果入站连接器是事务性的,Mule 会将消息再次传递到父流的入站连接器以重新尝试处理(即消息重新传递)。

【讨论】:

你推荐还是更好用:Route the Initial-State Message to the Dead Letter Queue? @mikedev 如果消息处于无法传递的位置,您将需要通知某人。您还希望将消息保留在某处以便重新发送,这将是 DLQ 的目的。 @mikedev this 可能很有趣

以上是关于使用 Mule 重新排队 JMS 请求的主要内容,如果未能解决你的问题,请参考以下文章

Mule 请求者正在使用 JMS 队列中的所有消息

超过 jms Mule 最大重新投递

重新传递 Mule ESB 处理的失败的 activemq jms 消息时保留异常原因

如何为手动“动画”重新排队对 UIView drawRect 的请求

如何取消所有排队的请求onFailure? (改造 2)

VSTS:如何重新排队损坏的构建和切换代理队列