我想定义一个队列,以便所有发送给它的消息都被路由到不同的worker,同时专门与其中一个worker共享 我想图表可以更好地解释
W(i) - 接收不同信息的工作者
W(sp) - 是接收所有消息的特殊工作者
Q - 队列
“--------------------------------------- Q ------ -------------------
| --------------------------- | ------------------ ---------- |
| --------------------------- | --------------------- ------- |
W1,W(SP)------------- W2,W(SP)----------- W3,W(SP)
正如你所看到的那样,W1,W2,W3,W4都是不同的工作者,每个人都接受像普通工人一样的不同信息。每个人都会从队列中收到一份工作
然而,每个消息应该像交换W(sp)一样共享。 我怎样才能实现它。是否有一些参数我可以设置,以便W(sp)始终可以接收队列中的所有事件
如果能提供帮助,那就太好了
编辑1
我发现理解这个问题有点棘手,这是另一个版本
我想循环分享队列中的作业,这样一份工作只给消费者一次,因为我想做并行处理工作,同时我想要一个特殊的消费者,这也将得到所有的队列中的工作。
例如:
counsumer - C1,C2,C3,C4
特殊消费者 - Csp
队列 - Q
Q中的每个作业都应该广播到C1,C2,C3,C4中的一个并与Csp共享。 因此,来自Q的作业在Csp和C(i)之一之间共享。有了这个,我将能够并行处理C1,C2,C3,C4等工作,同时用我的消费者Csp验证Q中的每个工作
答案 0 :(得分:0)
据我了解,您需要Topic Exchange。为消息设置不同的路由键。让工人选择他们感兴趣的东西。例如,需要获取所有消息的工作人员可以创建一个队列并使用“#”(哈希)绑定密钥将其绑定到交换。
我们创建了三个绑定: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.
答案 1 :(得分:0)
感谢vor寻求帮助,但我猜这没有帮助, 但我确实解决了这个问题。 它只是为队列命名,所以连接到队列的所有消费者都将获得循环共享的工作。 下面是一个例子
counsumer - C1,C2,C3,C4
特殊消费者 - Csp
队列 - Q
我应该按如下方式创建连接
的Emit:
channel.exchange_declare(exchange='logs2',type='fanout')
对于从C(i)接收事件,我应该绑定我的队列以与队列名称交换
channel.queue_bind(exchange='logs2',queue='hello')
连接到此队列的任何数量的消费者将以循环方式一次接收一个作业
用于接收与Csp交换的事件
channel.queue_bind(exchange='logs2',queue='special')
此特殊队列将接收来自交换的所有事件,因为它连接到exchange log2