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

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

Rabbitmq heartbea心跳檢測機(jī)制原理解析

熱門標(biāo)簽:陜西辦理400電話 宿州外呼系統(tǒng)公司 南充電銷外呼系統(tǒng) 海外工廠地圖標(biāo)注 地圖標(biāo)注小程序 信陽電銷外呼系統(tǒng)怎么樣 貴陽網(wǎng)絡(luò)外呼系統(tǒng)軟件 株洲電銷 南昌外呼系統(tǒng)定制

前言

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

而你將在服務(wù)器上看這樣的日志:

missed heartbeats from client, timeout: xxs

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

heartbeat通常用來檢測通信的對端是否存活(未正常關(guān)閉socket連接而異常crash)。其基本原理是檢測對應(yīng)的socket連接上數(shù)據(jù)的收發(fā)是否正常,如果一段時間內(nèi)沒有收發(fā)數(shù)據(jù),則向?qū)Χ税l(fā)送一個心跳檢測包,如果一段時間內(nèi)沒有回應(yīng)則認(rèn)為心跳超時,即認(rèn)為對端可能異常crash了。

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

關(guān)于rabbitmq心跳

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

如果服務(wù)端沒有配置

默認(rèn)代理心跳時間:

RabbitMQ 3.2.2:580秒
RabbitMQ 3.5.5:60秒

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

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

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

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

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

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

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

禁用心跳在python客戶端該如何設(shè)置:

在py3:ConnectionParameters設(shè)置heartbeat_interval=0即可。

在py2:ConnectionParameters設(shè)置heartbeat=0即可。

5.連接上的任何流量(傳輸?shù)挠行?shù)據(jù)、確認(rèn)等)都將被計入有效心跳,當(dāng)然也包括心跳幀。

6.我在網(wǎng)上看到有人問到這個問題:

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

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)提供了一種在網(wǎng)絡(luò)故障后自動恢復(fù)連接的機(jī)制,而pika只能通過檢測連接異常后再重新創(chuàng)建連接的方式。

示例代碼:通過檢測連接異常,重新創(chuàng)建連接:

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的實現(xiàn)

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

涉及的源碼:

start(SupPid, Sock, SendTimeoutSec,
   SendFun, ReceiveTimeoutSec, ReceiveFun) ->
  %%數(shù)據(jù)發(fā)送檢測進(jìn)程
  {ok, Sender} = start_heartbeater(SendTimeoutSec, SupPid, Sock,
                   SendFun, heartbeat_sender,
                   start_heartbeat_sender),
  %%數(shù)據(jù)接收檢測進(jìn)程
  {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}]} ->
        %% 收發(fā)數(shù)據(jù)有變化
        if NewStatVal =/= StatVal ->
            %%重新開始檢測
            Recurse({NewStatVal, 0});
          %%未達(dá)到指定次數(shù), 發(fā)送為0, 接收為1
          SameCount < Threshold ->
            %%計數(shù)加1, 再次檢測
            Recurse({NewStatVal, SameCount + 1});
          %%heartbeat超時
          true ->
            %%對于發(fā)送檢測超時, 向客戶端發(fā)送heartbeat包
            %%對于接收檢測超時, 向父進(jìn)程發(fā)送超時通知
            %%由父進(jìn)程觸發(fā)tcp關(guān)閉等操作
            case Handler() of
              %%接收檢測超時
              stop   -> ok;
              %%發(fā)送檢測超時
              continue -> Recurse({NewStatVal, 0})
            end;
      ...

收發(fā)檢測的時候利用了inet模塊的getstat,查看socket的統(tǒng)計信息

recv_oct: 查看socket上接收的字節(jié)數(shù)

send_oct: 查看socket上發(fā)送的字節(jié)數(shù)

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Rabbitmq heartbea心跳檢測機(jī)制原理解析》,本文關(guān)鍵詞  Rabbitmq,heartbea,心跳,檢測,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Rabbitmq heartbea心跳檢測機(jī)制原理解析》相關(guān)的同類信息!
  • 本頁收集關(guān)于Rabbitmq heartbea心跳檢測機(jī)制原理解析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲精品第1页| 蜜桃av一区二区三区| 国产精品久久综合| 一区二区三区欧美在线观看| 亚洲国产一区视频| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲乱码中文字幕| 免费精品99久久国产综合精品| 香蕉乱码成人久久天堂爱免费| 精品亚洲成a人在线观看| 99免费精品在线观看| 在线播放日韩导航| 中文字幕日韩一区| 久久99国产精品尤物| 91麻豆成人久久精品二区三区| 91美女视频网站| 久久九九全国免费| 天天综合网 天天综合色| 成人一级片网址| 日韩欧美三级在线| 亚洲自拍都市欧美小说| 成人性色生活片| 精品国产露脸精彩对白| 亚洲va天堂va国产va久| 精品在线播放免费| 欧美一二三四区在线| 日韩视频免费直播| 亚洲欧洲性图库| 天天av天天翘天天综合网色鬼国产| 国产精品1区2区3区| 日韩欧美中文字幕公布| 亚洲午夜激情网页| 一本久道久久综合中文字幕 | 中文字幕一区二区三区四区不卡| 日本伊人色综合网| 欧美色综合天天久久综合精品| 日韩极品在线观看| 99国内精品久久| 久久免费偷拍视频| 九九国产精品视频| 91精品国产综合久久香蕉麻豆 | 欧美一区二区三区在线观看| 国产精品色哟哟| 成人手机在线视频| 久久精品视频免费观看| 久久av中文字幕片| 精品国产免费一区二区三区四区 | 久久综合九色综合97婷婷女人 | 欧美一级日韩不卡播放免费| 亚洲精品综合在线| 91丨国产丨九色丨pron| 亚洲人成影院在线观看| 91国产成人在线| 洋洋av久久久久久久一区| 欧美日韩黄色一区二区| 亚洲国产色一区| 91精品视频网| 免费人成网站在线观看欧美高清| 欧美在线观看视频一区二区| 婷婷综合另类小说色区| 日韩一区二区在线看| 黄色日韩网站视频| 国产精品拍天天在线| 成人免费高清在线| 一区二区三区视频在线观看 | 国产精品99久久久久| 制服丝袜亚洲色图| 免费高清不卡av| 久久久久久97三级| 91极品视觉盛宴| 午夜精品久久久久影视| 精品久久一区二区| 丁香激情综合国产| 亚洲男人的天堂av| 91.com在线观看| 国产精品亚洲а∨天堂免在线| 国产精品视频在线看| 91极品视觉盛宴| 久久99精品久久只有精品| 国产精品毛片久久久久久| 在线一区二区观看| 精品一区二区三区影院在线午夜| 国产精品国产成人国产三级| 欧美蜜桃一区二区三区| 国产精品一区二区久久精品爱涩 | 卡一卡二国产精品| 国产精品美女久久久久aⅴ| 国产91在线观看丝袜| 一级做a爱片久久| 精品久久久久久久久久久久包黑料| 成人激情黄色小说| 丝袜美腿亚洲色图| 久久免费看少妇高潮| 欧美午夜一区二区| 成熟亚洲日本毛茸茸凸凹| 午夜日韩在线电影| 一区视频在线播放| 2020国产精品| 欧美精品在线观看播放| 狠狠色狠狠色综合系列| 亚洲成人av中文| 中文字幕视频一区二区三区久| 91精选在线观看| 欧美午夜一区二区三区免费大片| 日韩一区欧美二区| 一区二区三区四区激情| 欧美国产综合色视频| 日韩精品一区二区三区蜜臀| 在线精品视频小说1| 99免费精品视频| 国产精品资源网| 久久草av在线| 免费看欧美女人艹b| 污片在线观看一区二区| 亚洲免费在线视频| 精品欧美黑人一区二区三区| 精品视频一区二区三区免费| 99精品国产视频| 成人三级在线视频| 国产一区二区h| 日韩一区欧美小说| 国产精品美女久久久久久2018| 国产精品久久久一本精品| 国产精品精品国产色婷婷| 亚洲人成精品久久久久| 亚洲色图欧洲色图| 一区二区三区成人在线视频| 亚洲高清免费观看| 九色综合狠狠综合久久| 国产不卡视频在线播放| 91亚洲国产成人精品一区二区三| 色一情一伦一子一伦一区| 欧美日本精品一区二区三区| 5月丁香婷婷综合| 国产亚洲欧美一级| 亚洲日本丝袜连裤袜办公室| 五月天视频一区| 国产一区二区精品久久99| 91美女蜜桃在线| 6080日韩午夜伦伦午夜伦| 国产香蕉久久精品综合网| 亚洲日本护士毛茸茸| 美洲天堂一区二卡三卡四卡视频| 国产99一区视频免费| 91免费观看视频| 日韩一卡二卡三卡国产欧美| 国产精品久久精品日日| 亚洲成人三级小说| 国产福利91精品一区二区三区| 91免费视频网| 久久亚洲欧美国产精品乐播| 国产精品久久久久久久久快鸭| 日日夜夜免费精品| 成人福利电影精品一区二区在线观看 | 精品免费日韩av| 国产精品女同一区二区三区| 亚洲福利一区二区| 国产精品99精品久久免费| 欧美高清dvd| 中文字幕色av一区二区三区| 久久av老司机精品网站导航| 91在线精品一区二区三区| 欧美成人aa大片| 亚洲高清免费观看高清完整版在线观看 | 精彩视频一区二区| 欧美在线free| 1000精品久久久久久久久| 美腿丝袜亚洲色图| 色婷婷av久久久久久久| 国产精品久久夜| 国产一二精品视频| 日韩亚洲欧美综合| 亚洲国产精品久久久久秋霞影院| 成人av资源在线| 精品国产乱码久久久久久图片 | 日本不卡不码高清免费观看| av在线免费不卡| 国产欧美一区二区精品婷婷| 久久国产三级精品| 欧美日韩高清一区二区三区| 亚洲欧洲www| 成人视屏免费看| 国产日韩亚洲欧美综合| 久热成人在线视频| 日韩一区二区精品在线观看| 午夜精品一区二区三区电影天堂| 色欧美片视频在线观看| 成人免费一区二区三区视频 | 国产成人日日夜夜| 精品捆绑美女sm三区| 麻豆国产精品一区二区三区| 4438成人网| 美国毛片一区二区| 日韩精品在线一区| 国产综合成人久久大片91| 精品国产乱码久久久久久免费| 九九视频精品免费| 国产午夜精品一区二区三区嫩草| 国产成人在线观看| 中文字幕一区在线|