婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Rabbitmq heartbea心跳檢測機制原理解析

Rabbitmq heartbea心跳檢測機制原理解析

熱門標簽:陜西辦理400電話 宿州外呼系統公司 南充電銷外呼系統 海外工廠地圖標注 地圖標注小程序 信陽電銷外呼系統怎么樣 貴陽網絡外呼系統軟件 株洲電銷 南昌外呼系統定制

前言

使用rabbitmq的時候,當你客戶端與rabbitmq服務器之間一段時間沒有流量,服務器將會斷開與客戶端之間tcp連接。

而你將在服務器上看這樣的日志:

missed heartbeats from client, timeout: xxs

這個間隔時間就是心跳間隔。

heartbeat通常用來檢測通信的對端是否存活(未正常關閉socket連接而異常crash)。其基本原理是檢測對應的socket連接上數據的收發是否正常,如果一段時間內沒有收發數據,則向對端發送一個心跳檢測包,如果一段時間內沒有回應則認為心跳超時,即認為對端可能異常crash了。

rabbitmq也不例外,heatbeat在客戶端和服務端之間用于檢測對端是否正常,即客戶端與服務端之間的tcp鏈接是否正常。

關于rabbitmq心跳

1.heartbeat檢測時間間隔可在配置文件rabbitmq.config中增加配置項{heartbeat,Timeout}進行配置,其中Timeout指定時間間隔,單位為秒,另外客戶端也可以配置heartbeat時間。

如果服務端沒有配置

默認代理心跳時間:

RabbitMQ 3.2.2:580秒
RabbitMQ 3.5.5:60秒

2.官方建議不要禁用心跳,且建議心跳時間為60秒。

3.心跳每 heartbeat timeout / 2 秒發送一次,服務器兩次沒有接收到則斷開tcp連接,以前的連接將失效,客戶端需要重新連接。

4.如果你使用Java, .NET and Erlang clients,服務器與客戶端會協商heartbeat時間

如果其中一個值為0,則使用兩者中較大的一個

否則,使用兩者中較小的一個

兩個值都為0,則表示要禁用心跳,則服務端與客戶端維持此tcp連接,不會斷開。

注意:在python客戶端上直接設置為0,則禁用心跳。

禁用心跳在python客戶端該如何設置:

在py3:ConnectionParameters設置heartbeat_interval=0即可。

在py2:ConnectionParameters設置heartbeat=0即可。

5.連接上的任何流量(傳輸的有效數據、確認等)都將被計入有效心跳,當然也包括心跳幀。

6.我在網上看到有人問到這個問題:

為什么服務端宕機,在心跳檢測機制下,服務器側斷開連接,而客戶端這邊不能檢測到tcp斷開,我測試過,客戶端確實不能檢測到tcp連接斷開,只有當客戶端在這個tcp有操作后,才能檢測到,當然在一個斷開的tcp連接上做操作會報錯(如發送消息)。

import pika 
import time 

credit = pika.PlainCredentials(username='cloud', password='cloud')
connection = pika.BlockingConnection(pika.ConnectionParameters(
  host='10.32.1.12', credentials=credit))
channel = connection.channel() 
while True:
  connect_close = connection.is_closed
  connect_open = connection.is_open
  channel_close = channel.is_closed
  channel_open = channel.is_open
  
  print("connection is_closed ", connect_close)
  print("connection is_open ", connect_open)
  print("channel is_closed ", channel_close)
  print("channel is_open ", channel_open)
  print("")
  time.sleep(5)

7.一些RabbitMQ客戶端(Bunny,Java,.NET,Objective-C,Swift)提供了一種在網絡故障后自動恢復連接的機制,而pika只能通過檢測連接異常后再重新創建連接的方式。

示例代碼:通過檢測連接異常,重新創建連接:

import pika

while True:
  try:
    connection = pika.BlockingConnection()
    channel = connection.channel()
    channel.basic_consume('test', on_message_callback)
    channel.start_consuming()
  # Don't recover if connection was closed by broker
  except pika.exceptions.ConnectionClosedByBroker:
    break
  # Don't recover on channel errors
  except pika.exceptions.AMQPChannelError:
    break
  # Recover on all other connection errors
  except pika.exceptions.AMQPConnectionError:
    continue

你也可以使用操作重試庫,例如 retry。

from retry import retry

@retry(pika.exceptions.AMQPConnectionError, delay=5, jitter=(1, 3))
def consume():
  connection = pika.BlockingConnection()
  channel = connection.channel()
  channel.basic_consume('test', on_message_callback)
  try:
    channel.start_consuming()
  # Don't recover connections closed by server
  except pika.exceptions.ConnectionClosedByBroker:
    pass
consume()

heartbeat的實現

rabbitmq在收到來自客戶端的connection.tune-ok信令后,啟用心跳檢測,rabbitmq會為每個tcp連接創建兩個進程用于心跳檢測,一個進程定時檢測tcp連接上是否有數據發送(這里的發送是指rabbitmq發送數據給客戶端),如果一段時間內沒有數據發送給客戶端,則發送一個心跳包給客戶端,然后循環進行下一次檢測;另一個進程定時檢測tcp連接上是否有數據的接收,如果一段時間內沒有收到任何數據,則判定為心跳超時,最終會關閉tcp連接。另外,rabbitmq的流量控制機制可能會暫停heartbeat檢測,這里不展開描述。

涉及的源碼:

start(SupPid, Sock, SendTimeoutSec,
   SendFun, ReceiveTimeoutSec, ReceiveFun) ->
  %%數據發送檢測進程
  {ok, Sender} = start_heartbeater(SendTimeoutSec, SupPid, Sock,
                   SendFun, heartbeat_sender,
                   start_heartbeat_sender),
  %%數據接收檢測進程
  {ok, Receiver} = start_heartbeater(ReceiveTimeoutSec, SupPid,
                    Sock, ReceiveFun,
                    heartbeat_receiver,
                    start_heartbeat_receiver),
  {Sender, Receiver}.

start_heartbeat_sender(Sock, TimeoutSec, SendFun) ->
  %% the 'div 2' is there so that we don't end up waiting for
  %% nearly 2 * TimeoutSec before sending a heartbeat in the
  %% boundary case
  heartbeater({Sock, TimeoutSec * 1000 div 2, send_oct, 0,
         fun () -> SendFun(), continue end}).

start_heartbeat_receiver(Sock, TimeoutSec, ReceiveFun) ->
  %% we check for incoming data every interval, and time out after
  %% two checks with no change. As a result we will time out
  %% between 2 and 3 intervals after the last data has been
  %% received
  heartbeater({Sock, TimeoutSec * 1000, recv_oct, 1,
        fun () -> ReceiveFun(), stop end}).

heartbeater({Sock, TimeoutMillisec, 
       StatName, Threshold, Handler} = Params,
      Deb,
      {StatVal, SameCount} = State) ->
  Recurse = fun (State1) -> heartbeater(Params, Deb, State1) end,
  receive
    ...
  %% 定時檢測
  after TimeoutMillisec ->
    case rabbit_net:getstat(Sock, [StatName]) of
      {ok, [{StatName, NewStatVal}]} ->
        %% 收發數據有變化
        if NewStatVal =/= StatVal ->
            %%重新開始檢測
            Recurse({NewStatVal, 0});
          %%未達到指定次數, 發送為0, 接收為1
          SameCount < Threshold ->
            %%計數加1, 再次檢測
            Recurse({NewStatVal, SameCount + 1});
          %%heartbeat超時
          true ->
            %%對于發送檢測超時, 向客戶端發送heartbeat包
            %%對于接收檢測超時, 向父進程發送超時通知
            %%由父進程觸發tcp關閉等操作
            case Handler() of
              %%接收檢測超時
              stop   -> ok;
              %%發送檢測超時
              continue -> Recurse({NewStatVal, 0})
            end;
      ...

收發檢測的時候利用了inet模塊的getstat,查看socket的統計信息

recv_oct: 查看socket上接收的字節數

send_oct: 查看socket上發送的字節數

inet詳細見這里: http://www.erlang.org/doc/man/inet.html

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:鄭州 石嘴山 晉城 三明 汕頭 玉林 拉薩 開封

巨人網絡通訊聲明:本文標題《Rabbitmq heartbea心跳檢測機制原理解析》,本文關鍵詞  Rabbitmq,heartbea,心跳,檢測,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Rabbitmq heartbea心跳檢測機制原理解析》相關的同類信息!
  • 本頁收集關于Rabbitmq heartbea心跳檢測機制原理解析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91美女片黄在线观看| 国产精品456| 欧美亚洲高清一区| 日韩一区二区三区高清免费看看 | 欧美日本韩国一区二区三区视频 | 国产一区二区在线影院| 国产在线不卡视频| 久久看人人爽人人| 日产国产高清一区二区三区| 亚洲另类春色国产| 欧美一级在线视频| 日本一区二区三区视频视频| 午夜精品福利一区二区三区av | av激情亚洲男人天堂| 在线播放91灌醉迷j高跟美女 | 国产麻豆精品theporn| 91色乱码一区二区三区| 久久夜色精品国产噜噜av| 亚洲成人自拍一区| 福利电影一区二区| 国产亚洲一区二区三区四区 | 日韩欧美自拍偷拍| 一区二区欧美精品| 色哟哟一区二区| 欧美国产成人精品| 国产999精品久久久久久| 亚洲三级在线播放| 国精品**一区二区三区在线蜜桃| 91在线观看视频| 国产欧美日韩在线看| 国产精品888| 国产精品白丝在线| 91小视频免费观看| 亚洲高清不卡在线观看| 欧美另类一区二区三区| 理论电影国产精品| 国产精品美女久久久久久久 | 国产精品毛片久久久久久久| 麻豆91小视频| 久久久精品国产免大香伊| 老司机一区二区| 国产精品久久久久影院亚瑟| 在线观看精品一区| 激情文学综合丁香| 一区二区三区中文字幕电影| 成人丝袜高跟foot| 午夜精品久久久久久不卡8050| 日韩亚洲欧美成人一区| k8久久久一区二区三区 | 中日韩av电影| 69成人精品免费视频| 成人黄动漫网站免费app| 五月天激情小说综合| 亚洲国产精品黑人久久久| 在线观看亚洲精品视频| 国模冰冰炮一区二区| 亚洲mv大片欧洲mv大片精品| 欧美激情一区二区三区蜜桃视频| 欧洲中文字幕精品| 日韩三级在线免费观看| 不卡的电视剧免费网站有什么| 婷婷夜色潮精品综合在线| 亚洲欧美日本在线| 国产精品乱码妇女bbbb| 久久精品视频一区二区三区| 91精品欧美久久久久久动漫| 白白色亚洲国产精品| 国产一区 二区| 蜜臂av日日欢夜夜爽一区| 亚洲高清一区二区三区| 亚洲精品成人a在线观看| 亚洲人成人一区二区在线观看| 国产网站一区二区三区| 国产亚洲一区二区三区四区 | 亚洲人成在线播放网站岛国 | 亚洲午夜久久久久久久久电影网 | 欧美日韩国产成人在线免费| 色先锋久久av资源部| 国产成人综合精品三级| 国产999精品久久| 日本韩国一区二区三区| 色综合久久综合| 欧美亚洲综合在线| 宅男在线国产精品| 51精品久久久久久久蜜臀| 欧美电影免费观看高清完整版| 91精品啪在线观看国产60岁| 日韩一级免费一区| 欧美精品一区二区三区久久久| 欧美中文字幕一区二区三区亚洲| 99久久er热在这里只有精品15| 尤物av一区二区| 欧洲av在线精品| 69av一区二区三区| 在线综合亚洲欧美在线视频| 久久婷婷国产综合精品青草| 国产精品入口麻豆九色| 亚洲国产精品一区二区久久| 韩国视频一区二区| 91豆麻精品91久久久久久| 欧美大胆人体bbbb| 亚洲激情中文1区| 国产麻豆精品视频| 欧美美女一区二区| 久久免费电影网| 奇米影视一区二区三区| 91免费版在线| 日本一区免费视频| 久久se精品一区二区| 欧美日本免费一区二区三区| 国产精品高潮呻吟| 国产成人99久久亚洲综合精品| 91福利国产精品| 色屁屁一区二区| 国产三级一区二区| 国产一区二区精品久久99| 日韩欧美国产一区二区三区| 五月天激情综合| 欧美一区二区三区免费视频| 视频一区二区国产| 7777精品伊人久久久大香线蕉超级流畅| 亚洲永久精品大片| 欧美精品电影在线播放| 欧美bbbbb| 精品欧美乱码久久久久久1区2区 | 亚洲精品国产品国语在线app| 国产福利视频一区二区三区| 国产精品二三区| 精品国产乱码久久久久久免费| 日韩激情中文字幕| 26uuu久久天堂性欧美| 国产福利91精品一区二区三区| 欧美国产一区视频在线观看| 91色综合久久久久婷婷| 亚洲精品一二三区| 欧美猛男男办公室激情| 欧美a级一区二区| 国产精品网站一区| 欧美精品第1页| 福利视频网站一区二区三区| 一区二区三区色| 日韩天堂在线观看| 99精品欧美一区| 亚洲午夜在线电影| 欧美日韩专区在线| 丰满少妇久久久久久久 | 欧美日韩电影在线播放| 麻豆91精品视频| 国产精品乱人伦| 日韩欧美一二区| 欧美影院一区二区三区| 久久精品久久精品| 亚洲人亚洲人成电影网站色| 精品国产百合女同互慰| 欧美色精品在线视频| 国产v综合v亚洲欧| 不卡视频在线看| 国产日产欧美一区二区三区| 青青青伊人色综合久久| 一二三区精品福利视频| 国产片一区二区| 久久综合成人精品亚洲另类欧美| 欧美性做爰猛烈叫床潮| 欧洲精品在线观看| 日本黄色一区二区| 91色porny| 91丨九色丨尤物| 91丝袜高跟美女视频| 欧美精品乱码久久久久久| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美视频你懂的| 欧美性生活久久| 精品视频在线免费看| 欧美日韩国产经典色站一区二区三区| 暴力调教一区二区三区| 91丨九色丨尤物| 欧美日韩免费在线视频| 91麻豆精品国产91久久久久| 欧美一区二区福利在线| 日韩欧美综合在线| 国产亚洲制服色| 精品粉嫩aⅴ一区二区三区四区| 日韩精品专区在线影院重磅| 欧美岛国在线观看| 亚洲欧美日韩一区二区| 亚洲精品免费在线| 裸体一区二区三区| 成人免费精品视频| 欧美日韩一二三区| 久久精品一区二区三区av| 中文字幕一区二区三区蜜月 | 久久丁香综合五月国产三级网站| 久久国产精品一区二区| 不卡视频一二三| 欧美一区二区免费| 亚洲精品一卡二卡| 国产成人精品一区二区三区四区| 欧美日韩大陆在线| 国产精品国产a级| 韩国欧美国产一区|