0

我想定义一个队列,以便将所有进入它的消息路由到不同的工作人员,同时与其中一名工作人员共享我想一张图可以更好地解释

W(i) - 接收不同消息的 Worker

W(sp) - 是接收所有消息的特殊工作者

Q - 队列

'----------------------------------------Q---------- ----------------

|--------------------------- |---------- -------- |
|--------------------------- |---------- -------- |
W1,W(sp)----------W2,W(sp)-----------W3,W(sp)

如您所见,W1、W2、W3、W4 都是不同的工作人员,每个工作人员都像普通工作人员一样接收不同的消息。每个人都会从队列中收到一份工作

然而,每个消息都应该像交换 W(sp) 一样共享。我怎样才能实现它。是否有一些我可以设置的参数,以便 W(sp) 始终可以接收队列中的所有事件

如果你能帮忙就太好了

编辑 1

我发现理解这个问题有点棘手,这是另一个版本

我想以循环方式共享队列中的作业,以便一个作业只给一个消费者一次,因为我想对作业进行并行处理,同时我想要一个特殊的消费者,它也将从队列中获取所有作业.

例如:

消费者 - C1,C2,C3,C4

特殊消费者 - Csp

队列-Q

Q 中的每个作业都应广播到 C1,C2,C3,C4 之一并与 Csp 共享。因此,来自 Q 的作业在 Csp 和 C(i) 之一之间共享。有了这个,我将能够并行处理 C1、C2、C3、C4 等中的作业,同时使用我的消费者 Csp 验证 Q 中的每个作业

4

2 回答 2

0

感谢 vor 的帮助,但我想这没有帮助,但我确实解决了问题。这只是为队列命名,以便连接到队列的所有消费者都将获得轮询共享的工作。这是一个例子

消费者 - C1,C2,C3,C4

特殊消费者 - Csp

队列-Q

我应该如下创建连接

发射:

channel.exchange_declare(exchange='logs2',type='fanout')

为了从 C(i) 接收事件,我应该绑定我的队列以使用队列名称进行交换

channel.queue_bind(exchange='logs2',queue='hello')

连接到此队列的任何数量的消费者都将在循环中一次收到一个作业

用于从与 Csp 的交换中接收事件

channel.queue_bind(exchange='logs2',queue='special')

这个特殊队列将接收来自交换的所有事件,因为它连接到交换日志2

于 2015-02-20T14:30:10.453 回答
0

据我了解,您需要一个主题交换。为消息设置不同的路由键。并让Workers选择他们感兴趣的内容。例如,需要获取所有消息的worker可以创建一个队列并使用“#”(哈希)绑定键将其绑定到交换器。

我们创建了三个绑定:Q1 与绑定键“ .orange. ”绑定,Q2 与“ ..rabbit ”和“lazy.#”绑定。

这些绑定可以概括为:

Q1 is interested in all the orange animals.
Q2 wants to hear everything about rabbits, and everything about lazy animals.

路由键设置为“quick.orange.rabbit”的消息将被传递到两个队列。消息“lazy.orange.elephant”也将发送给他们两个。另一方面,“quick.orange.fox”只会进入第一个队列,而“lazy.brown.fox”只会进入第二个队列。"lazy.pink.rabbit" 只会被传递到第二个队列一次,即使它匹配两个绑定。“quick.brown.fox”与任何绑定都不匹配,因此将被丢弃。

更新:

看看这个人拥有的存储库:https ://github.com/simonmacmullen

我猜你会对这个感兴趣:https ://github.com/simonmacmullen/random-exchange

This exchange type is for load-balancing among consumers.
于 2015-02-19T13:42:37.050 回答