クライアントとサーバー間でcelery
-configを実行しています。rabbitmq
クライアントプロセスはサーバーのポート5672で接続を開きます。netstat -np
サーバーでこれを使ってソケットが設定されたと報告したため確認しました。
クライアントのプロセスが中断され、存在しなくなりました。ただし、netstat -np
接続が確立されていると表示されます。また、クライアントで実行して、netstat -np
そのポートのサーバーに接続するプロセスがないことを確認しました。
ソケットがESTABLISHED状態に保たれるのはなぜですか?
答え1
AMQP必要クライアントが接続を正しく閉じないと(長期実行ジョブの場合)、接続のサーバー側は開いたままになります。もっと読むこの投稿。
これらの接続を手動で閉じたり、rabbitmqctl
cron操作でこれを行うスクリプトを作成したりできますが、どちらもアプリケーションレベルの問題に対する非常に見苦しい外部アプローチです。
可能であれば開いてください心拍数そして、タイムアウトを既知の最長処理タスクより15〜20%長く設定してください。これにより、ハートビートタイムアウト後に「死んだ」接続がリサイクルされますが、長時間使用していたクライアントの接続も失われるので注意してください。