Как помешать Amazon ELB сидеть перед RabbitMQ тесной связью с сельдереем?
- ELB автоматически закроет соединение на 60 секунд на холостом ходу с переключением соединения TCP в состояние CLOSE_WAIT
- тем не менее, сельдерей не замечают и продолжают публиковать сообщение задачи
- сообщение будет храниться в буфере отправки
- когда буфер заполнен, вызов публикации сельдерея будет заблокирован.
Возможные повреждения:
- Сообщение в буфере отправки будет потеряно
- Блокирующий вызов публикации будет очень вреден для однопоточных сред ioloop. например Торнадо
1 ответ
Решения
BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True}
чтобы сельдерей ждал подтверждения для каждого опубликованного сообщения, если подтверждение не получено, он восстановит соединение и отправит снова. Применяются только к py-amqp ( ref), снижению производительности.- Celery-RabbitMQ Heartbeat, чтобы поддерживать активное соединение и избегать автоматического закрытия ELB. Добавьте дополнительные накладные расходы сети, сердцебиение может не доставить обе стороны в плохой сетевой среде и привести к тому, что это решение не работает.