2014-10-08 39 views
2
  1. ELB會爲60秒怠速自動關閉連接,具有TCP連接切換到CLOSE_WAIT狀態
  2. 然而,芹菜不會受到關注,並保持發佈任務信息
  3. 信息將被保存在發送緩衝區
  4. 當緩衝區已滿時,芹菜發佈呼叫將被阻止。

可能的破壞:如何防止Amazon ELB坐在RabbitMQ前與芹菜關係緊密?

  • 在發送緩衝區信息將丟失
  • 阻塞調用的發佈將是單線程ioloop框架是非常有害的。例如龍捲風

回答

2

解決方案

  • BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True},使芹菜等待ACK爲每個發佈的消息,如果ACK沒有收到,它將重新構建連接並重新發送。只適用於py-amqp(ref),表現降級。
  • Celery-RabbitMQ Heartbeat保持連接活動並避免ELB的自動關閉連接。增加額外的網絡開銷,心跳可能無法在惡劣的網絡環境中傳遞到兩端,並導致此解決方案無法工作。