2
  1. ELB は、TCP 接続が CLOSE_WAIT 状態に切り替わり、60 秒間アイドリング状態で接続を自動的に閉じます。
  2. ただし、セロリは気付かれず、パブリッシュタスクメッセージを保持します
  3. メッセージは送信バッファに保持されます
  4. バッファーがいっぱいになると、セロリの公開呼び出しがブロックされます。

考えられる損害:

  • 送信バッファ内のメッセージは失われます
  • ブロッキング パブリッシング呼び出しは、シングル スレッド ioloop フレームワークにとって非常に有害です。例: 竜巻
4

1 に答える 1

2

ソリューション

  • BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True}パブリッシュされた各メッセージの ack をセロリが待機するようにするには、ack が受信されない場合、接続を再構築して再度送信します。py-amqp ( ref )、パフォーマンスのダウングレードにのみ適用されます。
  • Celery-RabbitMQ Heartbeatは、接続をアクティブに保ち、ELB の自動クローズ接続を回避します。追加のネットワーク オーバーヘッドが追加されます。ハートビートは、悪いネットワーク環境では両端に配信されず、このソリューションが機能しない原因となる可能性があります。
于 2014-10-08T18:52:14.990 に答える