RabbitMQ PHP驱动程序(AMQP):处理被阻止的连接

时间:2016-05-09 22:35:59

标签: php rabbitmq amqp php-amqplib

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

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

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

正在运行

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

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

同时,消息未添加到队列中 - 我可以从仪表板中告诉它。

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

$this->channel->close();

或隐式(通过让脚本完成,AMQP对象析构函数完成剩下的工作)我收到通道被阻止的通知,然后该脚本冻结,据我所知,它等待一些数据完成close_ok方法

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

好的,看起来我有一个答案。

RabbitMQ将通知发布到有效连接。

因此,如果我尝试创建与遇到内存或磁盘问题的服务器的连接,那么这些通知根本没有帮助。

但是如果连接处于活动状态,那么关于阻止的通知会在我尝试发布消息后立即到达。

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