我使用 ActiveMQ 作为作业调度程序。这意味着一个 master 向 ActiveMQ 发送作业消息,多个 slave 从 ActiveMQ 获取作业消息并处理它们。当 slave 完成一项工作时,它们会将带有 job_id 的消息发送回 ActiveMQ。
然而,奴隶是不可靠的。如果一个slave在一段时间内没有响应,我们可以假设slave宕机,并尝试重新发送发送的job消息。
有没有什么好的想法来实现这种重新交付?
我使用 ActiveMQ 作为作业调度程序。这意味着一个 master 向 ActiveMQ 发送作业消息,多个 slave 从 ActiveMQ 获取作业消息并处理它们。当 slave 完成一项工作时,它们会将带有 job_id 的消息发送回 ActiveMQ。
然而,奴隶是不可靠的。如果一个slave在一段时间内没有响应,我们可以假设slave宕机,并尝试重新发送发送的job消息。
有没有什么好的想法来实现这种重新交付?
通常,消费者处理重新传递,以便在消息在代理上显示为飞行中时维护消息顺序。这意味着重新交付仅限于单个消费者,除非该消费者终止。通过这种方式,经纪人不知道重新交付。
在 ActiveMQ v5.7+ 中,您可以选择使用代理端重新传递,可以让代理在延迟后使用重新发送重新传递消息。这是由一个代理插件实现的,该插件通过调度程序重新传递来处理死信处理。当总消息顺序不重要以及消费者之间的吞吐量和负载分布在哪里时,这很有用。通过代理重新传递,未能传递给给定消费者的消息可以立即重新发送。
有关在配置文件中进行设置的示例,请参阅 ActiveMQ文档。