rabbitmq 队列连接问题
报错问题:
Library error: a socket error occurred
Could not publish to exchange. No channel available
环境:
PHP
出现场景:
由于消费进程处理时间过长,消费队列消费报错
问题所在:
连接长时间未响应(超过了心跳检测时间),服务端自动断开连接,而客户端的连接显示依然在,这时对服务端做一些响应操作时,会报错,不同的响应操作可能报不同的错误提示,目前,我只发现以上两个。PHP的消息队列扩展中有个isconnect检测连接方式,对服务端发起连接关闭是无效的。
解决办法:
1.将心跳检测间隔设置更长:
$this->connect = new \AMQPConnection(['heartbeat' => 600]);
2.在处理代码过程中,频繁的调用declareQueue()方法(必须在连接还在的时候调用,或者做其他响应队列操作),原理是,频繁的对消息队列的服务端做相应,保持互动。
更多推荐
Library error: a socket error occurred rabbitmq
发布评论