我在videlalvaro/php-amqplib应用程序中使用RabbitMQ库Laravel 4.2并且我开始收到以下错误:
fwrite(): send of 12 bytes failed with errno=104 Connection reset by peer"
有人可以提出任何可能导致这种情况的建议吗?
答案 0 :(得分:3)
“通过对等方重置连接”是TCP / IP等同于将电话重新关闭。它更礼貌而不仅仅是不回复,留下一个悬挂。但这并不是真正礼貌的TCP / IP逆转所期望的FIN-ACK。 (From other SO answer)
所以你无法做任何事情,这是服务器的问题。
但您可以使用try .. catch
块来处理该异常:
try {
$msg = new AMQPMessage('Hello World!');
$channel->basic_publish($msg, '', 'hello');
} catch (Exception $e) {
// handle exception
}
答案 1 :(得分:1)
我有同样的问题。将预取计数设置为1对我来说很有用,因为我并不关心稳定性方面的性能折衷。
C:
语法:
$channel->basic_qos(0, 1, false);
答案 2 :(得分:0)
我遇到了同样的问题。这个案例可以解决这个问题。您应该在 ClassNameConsumer 类中的“execute”方法中调用此方法。
对于 php 语言。
/**
* Resolved problem - Connection reset by peer
* @param AMQPMessage $msg
*/
public function keepAlive(AMQPMessage $msg)
{
if (!isset($this->message->delivery_info['channel'])) {
return;
}
/** @var AMQPChannel $channel */
$channel = $msg->delivery_info['channel'];
$pkt = new AMQPWriter();
$pkt->write_octet(8);
$pkt->write_short(0);
$pkt->write_long(0);
$pkt->write_octet(0xCE);
$channel->getConnection()->write($pkt->getvalue());
}