我正在为程序使用this库。重新初始化之前,我该如何确保我用于消费和/或生产的通道仍在工作?例如,在ruby中,我可以简单地做:
bunny_client = Bunny.new({....})
bunny_client.start
启动客户端,然后
if not bunny_client or bunny_client.status != :connected
# re-initialize the client
如何使用streadway的amqp客户端执行此操作?
QueueDeclare
和QueueDeclare
功能可能提供等效的功能。根据文档:
使用此方法来检查队列中驻留了多少未经确认的消息,有多少消费者正在接收传递,并且是否已经存在使用此名称的队列。
如果存在使用此名称的队列,请使用Channel.QueueDeclare检查它是否使用特定参数声明。
如果此名称的队列不存在,将返回错误并关闭通道。
QueueInspect
:
QueueDeclare声明一个队列来保存消息并传递给使用者。声明会创建一个尚不存在的队列,或者确保现有队列与相同参数匹配。
[这些文档中似乎也有一些有关QueueInspect
队列(存活服务器重新启动)的好信息。
我通过反复试验解决了大多数连通性问题,以了解哪些模式将起作用而哪些将不起作用。我认为最好的方法是在使用通道时对其进行标记(错误)。如果发布失败,则在库端也会对其进行标记。无论如何,从服务器接收到的错误都会自动终止通道,因此它只是告诉我的通道池在标记时重新构建通道。
您可以使用我在golang中的库作为示例来创建连接/通道池,以及如何将通道标记为错误。
QueueInspect