在 RabbiqMQ 直接交换中,仅将消息传递到绑定到路由键的一个队列

cod*_*eak 1 rabbitmq

我是 RabbitMQ 的新手,这让我很困惑。我已经设置了一个直接交换,并且不同的队列在这个交换上订阅了不同的路由密钥。我想要的是,如果一条消息使用一个路由键发布,它只会从一个订阅者那里消费,无论有多少队列订阅了该路由键。

当前场景:

交换(类型:直接)

-QueueA1  (receives message A from exchange with routing key of "TypeA")
-QueueA2  (also receive message A from exchange with routing key of "TypeA")
-QueueB  (doesn't receive message A because it subscribes to key "TypeB")
Run Code Online (Sandbox Code Playgroud)

期望:

-QueueA1  (receives message A from exchange with routing key of "TypeA")
-QueueA2  (doesn't receive message A because it's already consumed by QueueA1)
-QueueB  (doesn't receive message A because it subscribes to key "TypeB")
Run Code Online (Sandbox Code Playgroud)

我需要使用不同的交易所吗?我如何实现所需的场景?

Jea*_*ron 5

您可以通过使用单个QueueA订阅此队列的多个消费者来实现您想要的:

Direct exchange
|
|-- ["TypeA"]--> QueueA
|                |-- Consumer A1
|                `-- Consumer A2
|
`-- ["TypeB"]--> QueueB
Run Code Online (Sandbox Code Playgroud)

在这种情况下,排队的消息QueueA将只传递给一个消费者。然而,获取消息的消费者是未定义的:它们以循环方式被挑选。