【问题标题】:AMQPRuntimeException: Error reading data. Received 0 instead of expected 7 bytesAMQPRuntimeException:读取数据时出错。收到 0 而不是预期的 7 个字节
【发布时间】:2014-08-10 07:47:30
【问题描述】:

它可以工作,但现在它不再工作了!

我正在使用 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;
}

当我把它放在异常之前:

die($res." :".$n);

结果是:

Ï :7 :7

它被调用了两次,第一次调用 $res 是两个空字符,然后是 "Ï"

在第二次调用中它只是空值。

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

【问题讨论】:

    标签: php rabbitmq amqp


    【解决方案1】:

    我找到了解决办法。

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

    【讨论】:

    • 是的,这通常发生在您的凭据错误时。我应该更新库并在此处实际显示正确的错误消息。
    • 是的,最好显示有关凭据的错误消息。
    • 在我们的案例中,我们错误地打开了数千个消费者连接,这会耗尽服务器并得到相同的错误消息
    【解决方案2】:

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

    因此,如果用户权限调整不起作用,请检查连接参数。

    【讨论】:

    • 你拯救了我的一天!谢谢
    【解决方案3】:

    我知道这个问题已经得到解答,但还有另一个可能的原因:

    默认情况下,默认的“guest”用户只能通过 localhost 进行连接。 https://www.rabbitmq.com/access-control.html

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

    rabbitmqctl add_user newuser <PASSWORD>
    rabbitmqctl set_permissions -p / newuser ".*" ".*" ".*"
    

    github here 上还有许多其他可能的答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2022-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      相关资源
      最近更新 更多