gpt4 book ai didi

RabbitMQ 在主题交换中展开

转载 作者:行者123 更新时间:2023-12-02 19:18:57 28 4
gpt4 key购买 nike

RabbitMQ 还很新,我们仍处于调查阶段,看看它是否适合我们的用例 -

我们很容易得出结论,我们想要的拓扑将让我们部署一些基于主题的交换,然后从那里过滤到特定的队列。例如,假设我们有一个用户和一个上传交换,其中用户队列可能会收到主题为“新注册”或“好友请求”的消息,而上传交换可能会收到“视频上传”或“好友请求”等消息。 “图片上传”。

创建队列,将它们路由到适当的队列,然后构建监听器来处理各个队列的消息非常简单。

但是我不清楚的是是否可以在主题交换上进行扇出?

即我已经命名了绑定(bind)到我的主题交换的队列,但我希望能够在这些队列中抛出大量监听器实例,以防止单点故障。但据我所知,RabbitMQ 以直接的循环方式对待这些监听器——例如每第 N 个消息始终发送到同一个第 N 个监听器,而不是将消息分派(dispatch)给第一个可用的使用者。这对我们来说通常是可以接受的,但考虑到我们预期的负载,我们希望避免在我们的消费者群中出现热点的可能性。

那么,是否有某种方法,无论是在队列或交换配置中还是在消费者代码中,我们可以将监听器指向主题队列,但以扇出方式处理监听器?

最佳答案

是的,通过使用不同的队列名称绑定(bind)监听器,它们将以扇出方式进行处理。

扇出是 1:N,即每个任务可以传递给多个监听器,例如 pub-sub。请注意,这并不限于扇出交换,而且如果您使用相同的绑定(bind)键将多个队列绑定(bind)到直接交换或主题交换,也适用。 (安装管理插件并查看其中的交换可能有助于可视化有效的绑定(bind)。)

您当前的设置是一个任务队列。每条任务/消息都精确地传递给一个工作人员/监听者。在同一个队列名称上放置更多监听器,它们将按照您所说的循环处理任务。使用“扇出”(一个主题的单独队列),您将多次处理一个任务。

根据您的平台,可能有满足您要求的现有工作队列解决方案,例如用于 Ruby 的 Resque 或 DelayedJob、用于 Python 的 Celery 或用于 JVM 的 Octobot 或 Akka。

关于RabbitMQ 在主题交换中展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5253557/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com