Время ожидания ошибки 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); 

Сокращение подсчета потребительской предварительной выборки устраняет это исключение таймаута.
Счет предварительной выборки по умолчанию не ограничен.