Socket
即使遠端程序停止,套接字仍保持 ESTABLISHED
我正在客戶端和伺服器之間執行
celery
-rabbitmq
配置。客戶端程序在伺服器上的埠 5672 上打開一個連接。在伺服器上使用netstat -np
我確認,因為套接字報告 ESTABLISHED。客戶端上的程序崩潰了,它不再存在。但
netstat -np
仍然顯示連接已建立。我也在netstat -np
客戶端上執行,並確認沒有程序連接到該埠上的伺服器。為什麼套接字保持在 ESTABLISHED 狀態?
如果客戶端沒有正確關閉連接(對於長時間執行的任務),AMQP要求連接的伺服器端保持打開狀態。在這篇文章中閱讀更多內容。
您可以手動關閉這些連接,也可以使用
rabbitmqctl
cron 作業編寫腳本來為您完成此操作,但這兩種方法都是針對應用程序級問題的相當醜陋的外部方法。如果可以,請打開心跳並將超時設置為比已知最長的處理任務多 15-20%。這應該在心跳超時後回收那些“死”連接,但要小心,因為它也會斷開任何已經忙碌太久的客戶端。
有關heartbeat和rabbitmqctl的更多資訊(請參閱雜項部分)。