Php AMQPRuntimeException:读取数据时出错。接收到0,而不是预期的7字节

Php AMQPRuntimeException:读取数据时出错。接收到0,而不是预期的7字节,php,rabbitmq,amqp,Php,Rabbitmq,Amqp,它一直在工作,但现在它不再工作了 我正在使用php amqplib和RabbitMQ 当我尝试创建新的AMQP连接时: $connection = new AMQPConnection('localhost', 5672, 'username', 'password'); 库中导致此错误的代码是: public function read($n) { $res = ''; $read = 0; while ($read < $n && !feo

它一直在工作,但现在它不再工作了

我正在使用php amqplib和RabbitMQ

当我尝试创建新的AMQP连接时:

$connection = new AMQPConnection('localhost', 5672, 'username', 'password');
库中导致此错误的代码是:

public function read($n)
{
    $res = '';
    $read = 0;

    while ($read < $n && !feof($this->sock) &&
        (false !== ($buf = fread($this->sock, $n - $read)))) {

        if ($buf === '') {
            continue;
        }

        $read += strlen($buf);
        $res .= $buf;
    }

    if (strlen($res)!=$n) {
        throw new AMQPRuntimeException("Error reading data. Received " .
            strlen($res) . " instead of expected $n bytes");
    }

    return $res;
}
结果是:

Ï :7 :7
它被调用两次,在第一次调用中,$res是两个空字符,然后是“Ï”

在第二次呼叫中,它只是空的

哦,有一次我手动删除了rabbitmq数据库mnesia文件夹中的文件,我不知道这是否导致了问题,但rabbitmq管理是一个运行在15672端口上的基于web的应用程序,工作正常。

我找到了解决方案


我使用的用户没有访问vhost的权限,因此在RabbitMQ管理中,我转到“管理”选项卡并单击用户名,然后单击“设置权限”按钮。

我知道这已经得到了回答,但还有一个可能的原因:

默认情况下,默认“来宾”用户只能通过本地主机进行连接。

在本地测试成功后,我第一次尝试远程连接时遇到此“接收到0”错误。设置不同的用户为我解决了这个问题

rabbitmqctl add_user newuser <PASSWORD>
rabbitmqctl set_permissions -p / newuser ".*" ".*" ".*"
rabbitmqctl添加用户newuser
rabbitmqctl设置\u权限-p/newuser“*”.*”

如果端口号错误,也会出现此错误。我错误地使用了管理端口15672而不是服务器端口5672,并且得到了相同的错误


所以,如果用户权限调整不起作用,请检查连接参数

是的,这通常发生在您有错误的凭据时。我应该更新lib,并在此处实际显示正确的错误消息。是的,最好显示有关凭据的错误消息。在我们的案例中,我们错误地打开了数千个消费者连接,耗尽了服务器,并且出现了与您救了我一天相同的错误消息!非常感谢。
rabbitmqctl add_user newuser <PASSWORD>
rabbitmqctl set_permissions -p / newuser ".*" ".*" ".*"