RabbitMQ错误:fwrite():发送12个字节失败,errno = 104连接由peer重置

时间:2015-04-15 15:04:38

标签: php laravel rabbitmq

我在videlalvaro/php-amqplib应用程序中使用RabbitMQ库Laravel 4.2并且我开始收到以下错误:

fwrite(): send of 12 bytes failed with errno=104 Connection reset by peer"

有人可以提出任何可能导致这种情况的建议吗?

3 个答案:

答案 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());
}