Исключение 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, работает нормально.
3 answers
Я нашел решение.
У пользователя, которого я использовал, не было доступа к vhost, поэтому в управлении RabbitMQ я перешел на вкладку "Администратор", нажал на имя пользователя и нажал кнопку "установить разрешение".
Вы также получите эту ошибку, если номер порта неверен. Я по ошибке использовал порт управления 15672 вместо порта сервера 5672 и получал ту же ошибку.
Поэтому, если настройка разрешений пользователя не работает, проверьте параметр подключения.
Я знаю, что на этот вопрос уже был дан ответ, но вот еще одна возможная причина:
Пользователь "гость" по умолчанию может подключаться только через локальный хост по умолчанию. https://www.rabbitmq.com/access-control.html
Я получил эту ошибку "получено 0" при попытке подключиться удаленно в первый раз после успешного локального тестирования. Настройка другого пользователя решила эту проблему для меня.
rabbitmqctl add_user newuser <PASSWORD>
rabbitmqctl set_permissions -p / newuser ".*" ".*" ".*"
Этот и многие другие потенциальные ответы также находятся на github здесь