一个具有多个路由密钥的交换或在RabbitMQ中有效的多个交换

时间:2019-03-13 06:18:50

标签: rabbitmq pika rabbitmq-exchange

我在项目中使用RabbitMQ,想知道我应该使用具有多个路由键的单个交换还是使用多个交换?哪个会更有效?

例如,如果我使用带有路由键A,B,C的单个交换机E,并且使用者连接到该交换机E,并使用A,B,C路由键获取数据。另一个选择是我应该将其发送到交换台A,交换台B,交换台C而没有路由密钥,并且使用者可以连接到每个交换台以获取所需数据。

使用python库pika(我当前正在使用)的示例:

channel.basic_publish(exchange='E',
                      routing_key='A',
                      body=data)  
channel.basic_publish(exchange='E',
                      routing_key='B',
                      body=data)  
channel.basic_publish(exchange='E',
                      routing_key='C',
                      body=data)

OR

channel.basic_publish(exchange='A',
                      routing_key='',
                      body=data)  
channel.basic_publish(exchange='B',
                      routing_key='',
                      body=data)  
channel.basic_publish(exchange='C',
                      routing_key='',
                      body=data)

1 个答案:

答案 0 :(得分:0)

您可以继续第一种方法。将您的exchange声明为直接交换。对于Direct Exchange,它将queue名称作为routing keyexchange能够将自己绑定到多个队列。同样,交换的工作是将消息路由到队列。绑定多个队列不会降低RabbitMQ的效率。