有选择地与rabbitmq中的工作进程共享消息

2024-06-09 08:08:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想定义一个队列,以便所有到达它的msg被路由到不同的worker,同时与其中一个worker共享 我想图表能更好地解释

W(i)-接收不同消息的工作者

W(sp)-是接收所有MSG的特殊工人

Q-队列

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

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

如您所见,W1、W2、W3、W4都是不同的工作者,每个工作者都像普通工作者一样接收不同的msg。每个将从队列中接收一个作业

但是,每个msg都应该像exchange W(sp)一样共享。 我怎样才能做到。我是否可以设置一些参数,以便W(sp)始终可以接收队列中的所有事件

如果你能帮忙就太好了

编辑1

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

我想以循环的方式共享队列中的作业,这样一个作业只给一个使用者一次,就像我想对作业进行并行处理一样,同时我想要一个特殊的使用者,它也将从队列中获取所有作业。你知道吗

例如:

顾问-C1、C2、C3、C4

特殊消费者-顾客服务提供商

队列-Q

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


Tags: 队列作业使用者msgspw1cspworker
2条回答

谢谢你的帮助,但我想那没用, 但是我解决了这个问题。 它只是给队列一个名称,这样所有连接到队列的消费者都可以循环共享工作。 举个例子

顾问-C1、C2、C3、C4

特殊消费者-顾客服务提供商

队列-Q

我应该创建如下连接

发射:

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

为了从C(i)接收事件,我应该用一个队列名将我的队列绑定到exchange

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

连接到此队列的任何数量的使用者都将以循环方式一次接收一个作业

用于从具有Csp的exchange接收事件

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

此特殊队列将接收来自exchange的所有事件,因为它连接到exchange日志2

据我所知,你需要一个Topic Exchange。为邮件设置不同的路由密钥。让工人们挑选他们感兴趣的东西。例如,需要获取所有消息的worker可以创建一个队列,并使用“#”(hash)绑定键将其绑定到exchange。你知道吗

We created three bindings: Q1 is bound with binding key ".orange." and Q2 with "..rabbit" and "lazy.#".

这些绑定可以概括为:

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

路由密钥设置为“”的邮件快。橙色。兔子“会的 传递到两个队列。“消息”懒。橙。象“也会去的 给他们两个。另一方面”快。橙色。狐狸“只会去 第一个队列,以及“懒惰的布朗狐狸“只有第二个。 "懒。粉红。兔子“将只传递到第二个队列一次, 即使它匹配两个绑定。”快。布朗。福克斯“不匹配 任何绑定都将被丢弃。你知道吗

更新时间:

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

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

This exchange type is for load-balancing among consumers.

相关问题 更多 >