RabbitMQ-在删除队列之前移动消息

问题描述 投票:1回答:1

RabbitMQ 3.7.16一起使用spring-amqp 2.2.3.RELEASE

多个客户端将消息发布到我们RabbitMQ服务器中的主题交换。为了独立地按每个客户端扩展消息的使用量,我们能够启动使用者并将其分配为仅处理特定的客户端ID。为实现此目的,每个客户端消费者都定义了一个新队列,并使用路由键events.<clientID>将其绑定到主题交换。主题交换还定义了一个备用交换,其中路由了来自所有其他客户端的消息-我们将此称为通用交换

因此覆盖范围很广,并且效果很好。

现在,当此客户端的消息速率下降时,我们也希望缩减其消费者,直至删除所有消费者。这样做的目的是将所有这些消息路由到通用交换机,那里有一群通用消费者来照顾它们。但是我还想从客户端队列中移动现有消息,这些消息在删除所有使用方之前没有被使用。

可以接受的是,让消息在客户端队列中以TTL过期,然后将它们以死信的方式发送给通用交换机,但是我还需要停止主题交换,以将new消息路由到此“快死了”队列。

所以我必须采取什么选择来阻止主题交换从路由消息到客户端队列,而现在没有用户与其连接?

或探索另一条路径-如何在已删除/已过期的队列中使邮件死信?

rabbitmq amqp spring-amqp spring-rabbitmq rabbitmq-exchange
1个回答
0
投票

如果客户端队列是唯一一个具有绑定绑定的队列,正如您的解释所暗示的那样,您只需删除交换机和队列之间的绑定即可。

此后,客户端的所有新消息将通过备用交换(即您的“通用交换”,由通用消费者处理。)>

关于客户端队列中剩余的消息,您可以使用铁锹将它们发送回主题交换机,以便将它们路由到通用交换机。

这基于备用交换是内部交换的假设。如果不是内部的,则可以直接用铲子瞄准。

© www.soinside.com 2019 - 2024. All rights reserved.