【发布时间】:2018-03-12 16:13:06
【问题描述】:
我不熟悉消息交换,但在为该任务寻找合适的手册时遇到了问题。
我需要组织队列池,这样:
生产者创建一些随机的空队列并在那里写入所有消息包(通常为 100 条消息)。
消费者找到非空非锁定队列并从中读取直到 它是空的,然后删除它并寻找下一个。
所以我的任务是将消息作为包处理,我了解如何在一个队列中使用相同的键来生成和使用,但找不到如何使用队列池。
我们可以让多个生产者和消费者并行运行,但不管它们中的哪一个发送给谁。 我们不需要也永远无法将特定的生产者与特定的消费者联系起来。
一般任务:我们有很多客户端接收推送通知,我们通过一些参数将推送分组以便稍后作为组处理,所以这样的组应该在 RabbitMQ 中的一个队列中进行生成和作为一个组消费,但每个组都独立于其他组。
非常感谢 Hannu 的帮助: 他的简单而强大的解决方案的关键思想是我们可以有一个已知名称的持久队列,生产者将写入创建队列的名称,消费者将读取这些名称从那里开始。
为了使他的解决方案更具可读性和更容易工作,在我的个人任务中,我将生产者中的 publish_data() 分为两个函数 - 一个创建随机队列并将其写入 control_queue 另一个接收这个 random_queue 并用消息填充它。类似的想法对消费者有好处 - 一个处理队列的函数,另一个将被调用来处理消息本身。
【问题讨论】:
-
您有多个生产者和消费者应用程序吗? “另一种可能的变体”也可以接受吗?这就是我可能会这样做的方式,或者是它的一种变体。
-
Hannu,我更新了问题的答案。
-
谢谢。我发布了一个候选答案。它的“kombuness”并没有闪耀,但它可以工作,并且至少会给出如何解决这个问题的想法。
标签: python rabbitmq message-queue kombu