【问题标题】:How to check if the channel is still working in streadway/amqp RabbitMQ client?如何检查通道是否仍在 streadway/amqp RabbitMQ 客户端工作?
【发布时间】:2013-06-14 12:23:40
【问题描述】:

我在我的程序中使用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 客户端执行此操作?

【问题讨论】:

标签: go rabbitmq amqp


【解决方案1】:

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

QueueInspect:

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

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

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

QueueDeclare:

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

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

【讨论】:

  • 怎么样?这些方法提供有关队列的信息,而不是通道,不是吗?我必须检查通道是否仍在运行,即通道上没有发生错误...
【解决方案2】:

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

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

https://github.com/houseofcat/turbocookedrabbit

【讨论】:

    猜你喜欢
    • 2011-09-20
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2011-10-22
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多