1

我正在使用github.com/streadway/amqp我的程序。在重新初始化之前,我应该如何确保我用于消费和/或生产的通道仍在工作?

例如,在 ruby​​ 中,我可以简单地执行以下操作:

bunny_client = Bunny.new({....})
bunny_client.start

启动客户端,以及

if not bunny_client or bunny_client.status != :connected
    # re-initialize the client

如何与streadway/amqp客户一起做到这一点?

4

2 回答 2

0

QueueDeclareQueueInspect函数可以提供等效的功能。根据文档:

QueueInspect

使用此方法检查队列中有多少未确认的消息,有多少消费者正在接收交付,以及该名称的队列是否已经存在。

如果此名称的队列存在,请使用 Channel.QueueDeclare 检查它是否使用特定参数声明。

如果此名称的队列不存在,则会返回错误并关闭通道。

QueueDeclare

QueueDeclare 声明一个队列来保存消息并传递给消费者。如果队列尚不存在,则声明创建队列,或确保现有队列匹配相同的参数。

看起来Durable这些文档中也有一些关于队列(幸存服务器重新启动)的好信息。

于 2013-06-16T08:40:59.620 回答
-1

我通过反复试验解决了大多数连接问题,看看哪些模式有效,哪些无效。我认为最好的方法是在使用通道时标记通道(错误时)。如果它未能发布,它也会在库端被标记。从服务器接收到的错误无论如何都会自动终止通道,因此它只是告诉我的通道池在标记时重建通道。

您可以使用我在 golang 中的库作为示例来创建连接/通道池以及如何在错误时标记通道。

https://github.com/houseofcat/turbocookedrabbit

于 2020-04-29T16:09:30.437 回答