Исключение AMQPRuntimeException: Ошибка при чтении данных. Получено 0 вместо ожидаемых 7 байт


Это работало, но теперь это больше не работает!

Я использую 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 - это два нулевых символа, затем "Ï"

И во втором звонке это просто ноль.

О, и я удалил файлы в папке mnesia базы данных rabbitmq вручную один раз, я не знаю, вызвало ли это проблему, но управление RabbitMQ, которое представляет собой веб-приложение, работающее на порту 15672, работает нормально.

Author: Michiel, 2014-08-10

3 answers

Я нашел решение.

У пользователя, которого я использовал, не было доступа к vhost, поэтому в управлении RabbitMQ я перешел на вкладку "Администратор", нажал на имя пользователя и нажал кнопку "установить разрешение".

 9
Author: M D P, 2014-08-10 21:49:51

Вы также получите эту ошибку, если номер порта неверен. Я по ошибке использовал порт управления 15672 вместо порта сервера 5672 и получал ту же ошибку.

Поэтому, если настройка разрешений пользователя не работает, проверьте параметр подключения.

 4
Author: hserge, 2014-12-01 18:22:03

Я знаю, что на этот вопрос уже был дан ответ, но вот еще одна возможная причина:

Пользователь "гость" по умолчанию может подключаться только через локальный хост по умолчанию. https://www.rabbitmq.com/access-control.html

Я получил эту ошибку "получено 0" при попытке подключиться удаленно в первый раз после успешного локального тестирования. Настройка другого пользователя решила эту проблему для меня.

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

Этот и многие другие потенциальные ответы также находятся на github здесь

 1
Author: scipilot, 2014-08-25 14:17:52