如何检查频道在golang的Rabbitmq客户端中是否仍在工作?

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

我正在为程序使用this库。重新初始化之前,我该如何确保我用于消费和/或生产的通道仍在工作?例如,在ruby中,我可以简单地做:

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

启动客户端,然后

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

如何使用streadway的amqp客户端执行此操作?

ruby go rabbitmq amqp
2个回答
0
投票

QueueDeclareQueueDeclare功能可能提供等效的功能。根据文档:

QueueInspect

使用此方法来检查队列中驻留了多少未经确认的消息,有多少消费者正在接收传递,并且是否已经存在使用此名称的队列。

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

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

QueueInspect

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

[这些文档中似乎也有一些有关QueueInspect队列(存活服务器重新启动)的好信息。


0
投票

我通过反复试验解决了大多数连通性问题,以了解哪些模式将起作用而哪些将不起作用。我认为最好的方法是在使用通道时对其进行标记(错误)。如果发布失败,则在库端也会对其进行标记。无论如何,从服务器接收到的错误都会自动终止通道,因此它只是告诉我的通道池在标记时重新构建通道。

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

QueueInspect

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