我使用ActiveMQ作为工作调度员。这意味着一个主服务器向ActiveMQ发送作业消息,多个从服务器从ActiveMQ获取作业消息并处理它们。当从服务器完成一个作业时,他们会将带有job_id的消息发送回ActiveMQ。
然而,奴隶是不可靠的。如果一个从站在一段时间之前没有响应,我们可以假设从站已关闭,并尝试重新发送已发送的作业消息。
有没有好的想法来实现这种重新交付?
答案 0 :(得分:0)
通常,消费者处理重新传递,以便在消息在代理上显示为空时,它可以维护消息顺序。这意味着除非消费者终止,否则重新发送仅限于单个消费者。通过这种方式,经纪人不知道重新发送。
在ActiveMQ v5.7 +中,您可以选择使用代理端重新传递,可以让代理在使用重新发送延迟后重新发送消息。这是通过代理插件实现的,该插件通过调度程序通过重新传递来处理死信处理。当总消息顺序不重要且消费者之间的吞吐量和负载分配在哪里时,这很有用。使用代理重新传递,无法传递给给定消费者的消息可以立即重新发送。
有关在配置文件中进行此设置的示例,请参阅ActiveMQ documentation。