rabbitMQ學習七:pika監控遠程連接及自動恢復


客戶端連接rabbitmq后,如果長時間沒有數據的傳輸,rabbitmq會申請關閉TCP連接,造成該TCP連接下的所有的信道都不可用,很多時候為了傳輸數據的高效率,我們會先創建一個信道池,這樣省去了每次數據傳輸連接和釋放連接的時間,但由於rabbitmq可能會遠程關閉連接,因此需要判斷連接池中的通道是否還有效;

判斷TCP連接和channel

import pika
# 首先創建一個TCP連接
# 添加用戶名和密碼
credentials = pika.PlainCredentials(self.__username, self.__passwd)
# 配置連接參數
parameters = pika.ConnectionParameters(host=self.__host,
                                        port=self.__port,
                                        credentials=credentials)
# 創建一個連接對象
connection = pika.BlockingConnection(parameters)
# 創建一個信道
channel = connection.channel() 

connection和channel判斷相關的重要方法:

  • connection.is_closed:判斷當前的TCP是否關閉,如果是關閉返回True,如果處於連接狀態,返回False;

  • connection.is_closing:判斷當前的TCP連接已發起關閉,但關閉還沒有完成的狀態,如果是關閉返回True,如果處於連接狀態,返回False;

  • connection.is_open:判斷當前的TCP連接是否打開,打開返回True,關閉返回False;

  • channel.is_open:判斷當前的channel是否打開,打開返回True,關閉返回False;

  • channel.is_closed:判斷當前的channel是否打開,如果是關閉返回True,如果打開返回False

注意

  1. connection關閉后,該連接下面的所有的channel都會關閉;

  2. is_closed和is_open這種函數只能判斷客戶端的連接是否打開或關閉,但是無法判斷服務端連接的狀態,所以當服務端遠程關閉了連接時,客戶端是不能感知到的;

  3. 可以設置心跳用來自動關閉異常的TCP連接;

  4. 如果服務端遠程關閉了連接,當客戶端發送消息時,捕捉異常並重新建立連接;

參考

supervisor之啟動rabbitmq報錯原因: https://www.cnblogs.com/cwp-bg/p/8939792.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM