我正在尝试构建有意义的代码来处理RabbitMQ由于磁盘级别或内存水印警报而开始阻止连接时的情况。
有可能为有关将连接设置为阻止模式的通知添加处理程序。
但是,似乎只有在我尝试关闭连接时才会发送此通知。
正在运行
$this->channel->basic_publish($msg, $this->exchangeName, $route);
执行成功,处理程序未收到有关被阻止连接的通知。
同时,消息未添加到队列中 - 我可以从仪表板中告诉它。
但是当我尝试明确地关闭连接时:
$this->channel->close();
或隐式(通过让脚本完成,AMQP对象析构函数完成剩下的工作)我收到通道被阻止的通知,然后该脚本冻结,据我所知,它等待一些数据完成close_ok方法
所以问题是如何在发布时(或之后)获取有关被阻止频道的信息?以及如何避免脚本在被阻止的连接上永远等待?
提前致谢。
答案 0 :(得分:1)
RabbitMQ将通知发布到有效连接。
因此,如果我尝试创建与遇到内存或磁盘问题的服务器的连接,那么这些通知根本没有帮助。
但是如果连接处于活动状态,那么关于阻止的通知会在我尝试发布消息后立即到达。
现在我只需要弄清楚如何检测服务器在创建新连接阶段遇到的问题。但这是另一个问题。