骡子&x2B;JMS:在重新交付时保留队列顺序

骡子&x2B;JMS:在重新交付时保留队列顺序,jms,mule,message-queue,mule-studio,Jms,Mule,Message Queue,Mule Studio,我有一个场景,如果端点关闭,ActiveMQ存储将消息排队,并且在接收到新请求时尝试重新传递所有排队的消息。因此,最新消息将是最后一条要处理的消息。如果端点仍处于关闭状态,则最新消息也将进入队列,如果进程收到新消息,它将再次启动 这种方法的问题是,当我弹出消息并重新尝试处理时,如果端点仍处于关闭状态,可能会导致队列无序,因为消息将重新插入队列的后面(例如,从MSG1、MSG2到MSG2、MSG1) 到目前为止,我考虑过在弹出之前添加服务器状态检查,但我很想知道是否有其他方法可以解决此问题,或者我

我有一个场景,如果端点关闭,ActiveMQ存储将消息排队,并且在接收到新请求时尝试重新传递所有排队的消息。因此,最新消息将是最后一条要处理的消息。如果端点仍处于关闭状态,则最新消息也将进入队列,如果进程收到新消息,它将再次启动

这种方法的问题是,当我弹出消息并重新尝试处理时,如果端点仍处于关闭状态,可能会导致队列无序,因为消息将重新插入队列的后面(例如,从MSG1、MSG2到MSG2、MSG1)


到目前为止,我考虑过在弹出之前添加服务器状态检查,但我很想知道是否有其他方法可以解决此问题,或者我只是错误地处理了重新交付方法。

这通常是一个通过重新排序器解决的问题:

  • EIP:
  • Mule实施:

谢谢你的建议。为了使重排程序产生任何效果,这难道不需要同时检索多条消息吗?是的,绝对需要。如果这不是一个选项,那么消息队列可能不是适合您的用例的存储…明白了-我也一直在想这个问题。吞吐量不是优先级,但持久性是。然而,在这一点上,是否有必要提供有序的担保仍有待讨论。不过,谢谢你的回应;我会接受答案的。附言:骡子在行动是非常有帮助的!:)更新:我调查了RabbitMQ,发现它们似乎提供了“足够高”的重新订购保证,只要有一个消费者。我相信我会用它来代替ActiveMQ。是的!已安装,目前测试结果为阳性。:)