1

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

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

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

所以跑步

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

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

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

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

$this->channel->close();

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

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

提前致谢。

4

1 回答 1

1

好的,看来我有答案了。

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

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

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

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

于 2016-05-09T23:05:07.510 回答