对RabbitMQ来说很新,我们仍处于调查阶段,看它是否适合我们的用例 -
我们很容易得出结论,我们所需的拓扑结构将让我们部署一些基于主题的交换,然后从那里过滤到特定的队列.例如,假设我们有一个用户和一个上传交换,其中用户队列可能会收到主题为"新注册"或"朋友请求"的消息,并且上传交换可能会收到"视频上传"等消息或"图片上传".
创建队列,将它们路由到适当的队列,然后构建侦听器来处理各种队列的消息已经非常简单.
然而,我不清楚的是,是否可以在主题交换上进行扇动?
即我已经命名了与我的主题交换绑定的队列,但我希望能够在这些队列中抛出大量的听众实例以防止单点故障.但据我所知,RabbitMQ以直接的循环方式对待这些听众 - 例如,每个Nth消息总是转到相同的第N个侦听器,而不是向第一个可用的消费者发送消息.这通常是我们可以接受的,但考虑到我们预期的负担,我们希望避免在我们的消费者农场中出现热点的可能性.
那么,是否有某种方式,无论是在队列或交换配置中还是在消费者代码中,我们可以将我们的侦听器指向主题队列但是以扇出方式处理侦听器?
小智 5
是的,通过让侦听器使用不同的队列名称进行绑定,它们将以扇出方式处理.
扇出是1:N,即每个任务可以传递给多个听众,如pub-sub.请注意,这不仅限于扇出交换,也适用于将多个队列绑定到具有相同绑定密钥的直接或主题交换的情况.(安装管理插件并查看交换可能有助于可视化有效的绑定.)
您当前的设置是一个任务队列.每个任务/消息都传递给一个工作者/监听者.在同一个队列名称中抛出更多的侦听器,他们将像你说的那样循环处理任务.通过"扇出"(主题的单独队列),您将多次处理任务.
根据您的平台,可能存在满足您要求的现有工作队列解决方案,例如用于Ruby的Resque或DelayedJob,用于Python的Celery或用于JVM的Octobot或Akka.
| 归档时间: |
|
| 查看次数: |
5715 次 |
| 最近记录: |