首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有被动故障切换使用者的RabbitMQ单一主动使用者

具有被动故障切换使用者的RabbitMQ单一主动使用者
EN

Stack Overflow用户
提问于 2015-08-17 23:10:33
回答 4查看 2.7K关注 0票数 11

我有一个可以水平缩放的API。API将确认客户端请求,并需要将工作分派到辅助系统。辅助系统需要以先到先服务的方式处理工作,即队列。此外,由于辅助系统正在访问可以共享的资源,因此在给定时间内只能有一个实例处于活动状态。辅助系统需要具有故障转移机制。如果辅助系统的第一个实例宕机,则需要另一个实例来取代它。

我在考虑使用RabbitMQ作为排队机制,让多个消费者连接,但只有一个活跃的消费者来处理工作。如果先前活动的使用者未能确认消息,则其他实例中的一个将接管处理消息的工作。使用RabbitMQ可以做到这一点吗?

另外,是否可以仅在作业完成后确认该消息?

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2019-12-02 19:10:59

这在RabbitMQ的新版本中是可能的:https://www.rabbitmq.com/consumers.html#single-active-consumer

票数 5
EN

Stack Overflow用户

发布于 2015-08-18 00:46:07

这在RabbitMQ中是不可能的,这是您想要的方式。

一个队列可以有多个消费者。但是,RabbitMQ会将消息传递给任何可以进行工作的消费者。换句话说,如果您有3个消费者,并且您向队列发送了3个消息,那么这些消费者中的每个都可能获得其中的1个消息。

如果您确实需要使用者的主动/被动故障转移,则需要使用另一个系统来管理和监视使用者的实例。

关于对正在完成的工作的认可:是的。通过将no_ack设置为true,将队列置于确认模式。这将要求您确认来自消费者的每条消息。您可以保留该消息,直到工作完成,然后在工作完成时确认该消息。

有关使用确认的示例,请参阅RabbitMQ文档中的worker queue示例,并简要讨论向消费者分发循环消息。

票数 2
EN

Stack Overflow用户

发布于 2015-08-17 23:22:58

在这种情况下,我建议通过队列复制消息,例如。如果一条消息有3个消费者,最好是构建3个队列,然后由交换器在这3个队列上复制消息。

另外,是否可以仅在作业完成后确认该消息?

是的,你可以在你的代码中移动ack,在你的例子中,在消息细化之后。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32053855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档