【问题标题】:RabbitMQ PHP driver (AMQP): handling blocked connectionsRabbitMQ PHP 驱动程序 (AMQP):处理阻塞的连接
【发布时间】:2016-05-09 22:35:59
【问题描述】:

我正在尝试构建有意义的代码来处理 RabbitMQ 由于磁盘级别或内存水印警报而开始阻塞连接的情况。

可以为有关将连接设置为阻塞模式的通知添加处理程序。

但是,似乎只有在我尝试关闭连接时才会发送此通知。

这么跑

$this->channel->basic_publish($msg, $this->exchangeName, $route);

执行成功,处理程序未收到有关阻塞连接的通知。

同时,消息没有添加到队列中 - 我可以从仪表板中看出。

但是当我尝试明确关闭连接时:

$this->channel->close();

或隐式(通过让脚本完成,AMQP 对象析构函数完成其余工作)我收到通道被阻塞的通知,并且在该脚本冻结之后,据我所知,它等待一些数据完成 close_ok 方法.

所以问题是如何在发布时(或之后)获取有关被阻止频道的信息?以及如何避免脚本在连接阻塞时永远等待?

提前致谢。

【问题讨论】:

    标签: php rabbitmq amqp php-amqplib


    【解决方案1】:

    好的,看来我有答案了。

    RabbitMQ 将通知发布到 活动 连接。

    因此,如果我尝试创建与遇到内存或磁盘问题的服务器的连接,这些通知将毫无帮助。

    但是,如果连接处于活动状态,那么在我尝试发布消息之后就会收到有关阻塞的通知,这是应该的。

    现在我只需要弄清楚如何检测服务器在创建新连接阶段遇到问题。但这是另一个问题。

    【讨论】:

    • 你有什么发现吗?现在遇到类似的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    相关资源
    最近更新 更多