Как помешать Amazon ELB сидеть перед RabbitMQ тесной связью с сельдереем?

  1. ELB автоматически закроет соединение на 60 секунд на холостом ходу с переключением соединения TCP в состояние CLOSE_WAIT
  2. тем не менее, сельдерей не замечают и продолжают публиковать сообщение задачи
  3. сообщение будет храниться в буфере отправки
  4. когда буфер заполнен, вызов публикации сельдерея будет заблокирован.

Возможные повреждения:

  • Сообщение в буфере отправки будет потеряно
  • Блокирующий вызов публикации будет очень вреден для однопоточных сред ioloop. например Торнадо

1 ответ

Решения

  • BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True} чтобы сельдерей ждал подтверждения для каждого опубликованного сообщения, если подтверждение не получено, он восстановит соединение и отправит снова. Применяются только к py-amqp ( ref), снижению производительности.
  • Celery-RabbitMQ Heartbeat, чтобы поддерживать активное соединение и избегать автоматического закрытия ELB. Добавьте дополнительные накладные расходы сети, сердцебиение может не доставить обе стороны в плохой сетевой среде и привести к тому, что это решение не работает.
Другие вопросы по тегам