Время ожидания ошибки RabbitMQ
Я установил RabbitMQ для того, чтобы разобрать около 20 000 запросов от внешнего API, но он сохраняет тайм-аут через несколько минут. Он действительно правильно разбирает около 2000 из 20 000 запросов.
В файле журнала говорится:
=INFO REPORT==== 16-Feb-2016::17:02:50 ===
accepting AMQP connection <0.1648.0> (127.0.0.1:33091 -> 127.0.0.1:5672)
=ERROR REPORT==== 16-Feb-2016::17:03:21 ===
closing AMQP connection <0.1648.0> (127.0.0.1:33091 -> 127.0.0.1:5672):
{writer,send_failed,{error,timeout}}
Я уже увеличил значение сердечного ритма, но я не могу понять, почему он тайминг. Конфигурация: Ubuntu 14.04, NGINX 1.8.1, RabbitMQ 3.6.0
Буду признателен за ваше время и вклад!
Ответы
Ответ 1
Я только что решил аналогичную проблему в python. В моем случае это было решено путем уменьшения количества предварительной выборки для потребителя, так что в его буфере приема было меньше сообщений.
Моя теория заключается в том, что буфер приема на потребителе заполняется, а затем RMQ пытается записать какое-то другое сообщение в потребительский сокет и не может из-за полного заполнения потребительского сокета. RMQ блокирует этот сокет и, в конечном итоге, отключает и просто закрывает соединение с потребителем.
Наличие меньшей очереди предварительной выборки означает, что буфер приема сокета не заполняется, а RMQ способен записывать любые ведомые бухгалтерии, которые он пытался сделать, и поэтому не делает таймаута для его записи и не закрывает соединение.
Это всего лишь теория, но, похоже, она держится в моем тестировании.
Ответ 2
Добавьте еще к ответу @tul.
subChannel.basicQos(10);
Сокращение подсчета потребительской предварительной выборки устраняет это исключение таймаута.
Счет предварительной выборки по умолчанию не ограничен.