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