当前位置: 首页 > 知识库问答 >
问题:

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

曹泉
2023-03-14

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

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

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个答案

上官和韵
2023-03-14

你可以继续你的第一个方法。将您的交换声明为直接交换。在直接交换的情况下,它将队列名称作为路由键。exchange能够将自身绑定到多个队列。此外,exchange的任务是将消息路由到队列。将多个队列绑定到它不会降低RabbitMQ的效率。

 类似资料:
  • 我试图使用BasicGet仅检索与通道的Exchange/Queue/RoutingKey组合匹配的消息。 我们的路由密钥的一个例子是 我遇到的问题是,路由密钥被完全忽略,所有消息无论指定的路由密钥是什么,都可以通过BasicGet获得。 我使用的是直接交换。我认为直接就足够了,我不需要通配符的能力,您可以通过主题交换获得路由键。 直接交换和路由密钥解决方案是否应该与BasicGet配合使用? 谢

  • 我正在寻找一种在RabbitMQ中进行分层路由的方法。我试图在留档中找到答案,但突然失败了。 通常,RabbitMQ允许您通过某个路由密钥连接到直接交换机,但我不清楚如何在多个交换机之间进行路由。 例如,假设我们有“根”交换和“主机1”交换,路由键为“主机1”。我有一个通过路由键绑定到“主机1”交换的队列。我可以用routing_key发布消息到“根”交换吗,比如“主机1.31261”?显然,它不

  • AMQP/RabbitMQ新手。试图掌握概念/原则,并偶然发现了这一点。 以下两种范式之间有什么区别? Fanout Exchange:FanoutExchange- 相对 直接交换:直接交换- 两者不是都达到相同的效果吗?如果没有,请有人可以阐明它有什么不同,以及在哪些情况下比其他情况更可取? 为什么它们有这两种类型的交换,而这两种交换都可以通过调整绑定中的路由键来实现? 谢谢

  • 我是AMQP的新手,正在尝试为RabbitMQ系统制定一个通知架构。 我想要一个主题交换(通知交换,比方说),特别是因为我想灵活地使用主题交换附带的路由密钥和队列,以及将来扩展该主题的更多选项。不过,我可能是错的,因为... 我还想让两个或更多的消费者使用每个通知。作为基线,我希望发布的每个通知都在数据库中结束。此外,我希望每个通知都可以由客户端应用程序使用(例如,web应用程序使用并进一步通过套

  • 因此,我们决定在向微服务体系结构的迁移中使用RabbitMQ作为消息/事件总线,但我们无法确定放置队列的最佳方式,我们有两种选择: 请记住,所有队列、交换和绑定都将通过发布或订阅的服务动态完成。

  • 我正在尝试将两个队列绑定到交换。两个队列必须使用相同的消息(路由密钥)。我能够直接使用RabbitMQ创建这两个队列。但是,当我尝试使用Apache Camel时,它会引发一个异常,指出“同一endpoint不允许使用多个使用者”。我假设Camel一定可以做到这一点,因为它是RabbitMQ中的一个基本功能。 我正在使用Camel RabbitMQ插件。是否需要一些额外的配置来实现此功能?