有选择地与rabbitmq中的工作人员共享消息



我想定义一个队列,以便所有到达它的消息都被路由到不同的工作者,同时与其中一个工作者共享我想图表可以解释更好的

W(i)-收到不同消息的工人

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中的每个作业

据我所知,您需要一个主题交换。为邮件设置不同的路由密钥。并让Workers选择他们感兴趣的内容。例如,需要获取所有消息的worker可以创建一个队列,并使用"#"(hash)绑定键将其绑定到交换机。

我们创建了三个绑定:Q1与绑定密钥".orange."绑定,Q2与"..rabit"one_answers"lazy.#"绑定。

这些绑定可以概括为:

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

路由密钥设置为"quickOrange.rabbbit"的消息将传递到两个队列。信息"懒惰.橙色.大象"也将消失给他们两个。另一方面,"快。橙。狐狸"只会去排在第一位的是"懒惰的棕色狐狸",只排在第二位。"懒惰.粉红色.兔子"只会被送到第二个队列一次,即使它匹配两个绑定。"快。棕色。狐狸"不匹配任何绑定,因此它将被丢弃。

更新时间:

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

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

This exchange type is for load-balancing among consumers.

感谢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')

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

最新更新