Golang:在不知道 RoutingKey 的情况下删除 AMQP 绑定

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

我有一个应用程序,其中包含要为其创建绑定的“ID”列表。例如:

输入:

1,2,3,4
创建的绑定(从交换
foo
到队列
bar
):

foo -> 1 -> bar
[..]
foo -> 4 -> bar

然后我从列表/输入中删除一个项目 (

4
) 并重新启动我的应用程序。
bar
队列是持久的(并且必须保持这种状态),现在我希望删除
4
的绑定。但是:我该怎么做?

有一个queueUnbind方法(https://pkg.go.dev/github.com/rabbitmq/amqp091-go#Channel.QueueUnbind),但这需要我知道routingKey(

4
)才能删除绑定。在这种情况下,我没有状态,所以我不知道哪些(如果有)项目消失了,因此不知道要删除哪些绑定。

我还可以删除

bar
队列,然后使用所有“当前”绑定重新创建它。但这可能会导致仍在该队列上的消息被销毁。我也无法删除
foo
交换,因为它已被其他人使用。

在我的服务中不引入任何状态:如何删除不再需要的绑定?

go amqp
1个回答
0
投票

如果您知道所需的绑定,您可以执行以下操作:

  • 在启动时重建队列/队列订阅,这样您就可以确定一切都按照您想要的方式设置。这也意味着您将删除/重新创建绑定,因此您可能会错过一些消息。

更好的方法可能如下:

这样您的应用程序就不必存储带有绑定(即状态)的文件,并且当旧的/不需要的绑定出现时会自动更正。

您还可以拒绝任何具有您无法识别的路由键的消息,将它们发送到死信队列并添加一个处理程序,该处理程序将自动从那里删除绑定。这样您就不必修改 th 的“消耗”部分中的绑定

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