多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 1.fwrite(): send of 21 bytes failed with errno=10054 远程主机强迫关闭了一个现有的连接。 参考来源:https://www.cnblogs.com/php-linux/p/11293807.html 用 rabbitmq 做消息队列时报上面的错误,当消费队列一启动,Unacked 瞬间达到好几百。经查:RabbitMQ服务器在短时间内发送大量的消息给Consumer,如果你没有来得及Ack的话,那么服务端会积压大量的UnAcked消息,而Consumer如果来不急处理也会处于假死或程序崩溃。 后果就是Consmer崩溃后,UnAcked消息又ReQueue不断消耗MQ的资源 解决方案 在消费者代码的队列声明后加上 ``` $channel->basic_qos(null, 10, null); ``` 参考来源:https://stackoverflow.com/questions/37174410/phpamqplib-uncaught-exception-errorexception-with-message-fwrite-send-of 最好的方法是查看Rabbitmq服务器的日志(如果可以访问)。 除了可以通过脚本平均在脚本执行时间达到30秒这一事实来判断之外,我还建议您控制客户端的消息量,因为这似乎会阻塞来自代理的消息量。 就phpamqplib而言,尝试在声明队列后立即执行以下操作: $channel->basic_qos(null, 10, null); 看看是否可行。如果没有,我认为网络设置/环境是问题。 `总结` 以上未经确认,问题来自于同事,其在本地测试出现以上问题。环境:window10+php7.3.4+apache2.4.39 最后发到测试环境,没有复现,不了了之。环境: centos6+php7.2.9+apache2.4.39