亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

封裝RabbitMQ.NETLibrary的一點經驗總結

2019-11-14 14:03:39
字體:
來源:轉載
供稿:網友

這篇文章內容會很短,主要是想給大家分享下我最近在做一個簡單的rabbitmq客戶端類庫的封裝的經驗總結,說是簡單其實一點都不簡單。為了節省時間我主要按照Library的執行順序來介紹,在你看來這里僅僅是一個簡單的經驗總結,但是在我看來這些經驗只有在你真正的封裝rabbitmq客戶端庫的時候且將你的客戶端安全穩定的發布上線后才會真的發現這些問題。

比如你的庫只是鏈接單個Node的時候和鏈接高可用集群的HAPRoxy時候是完全兩回事。當你未能在你的庫里使用反向注入LOG接口的時候一旦在線上發生網絡解析和序列化等一系列在線問題時候你是多么無能為力。當你使用同步循環獲取隊列消息的時候一旦發生異常你的鏈接就會斷掉等等這些細節。我總結了我在編寫這個library的時候慢慢穩定下來的過程和經驗。至少目前來看網絡上的文章,當然我是指.NET/C#方面的,都沒有講到這些問題,大部分的文章都是簡單的介紹了一個最最基本的使用和最最基本的demo而已,達不到企業級使用的要求。在這個過程中,感謝我的團隊和給過我指導的同事,讓我明白了一些技術道理。

好東西不能石沉大海,尤其是.NET領域更需要這樣的東西來填補這一空缺。廢話不多說了,進入主題,那些編寫框架和組件的大道理這里就不講了,我只說重點。

1.發送鏈接、通道和接受鏈接、通道要關注點分離

就是說你的接受Channel和發送的Channel要分離開,如果不分開會出現偶發性的消息串掉的錯誤,我這里現在沒有環境無法重現截圖。我是在做壓力測試的時候,用了一個Channel的時候Debug拋出來的異常。如果你有潔癖建議把IConnection也分離開。這樣不容易出錯,就算出錯排錯也會很容易。

(圖1:分開接受和發送的IConnection、Channel)

還有一點,不要將這些對象直接散落在直接使用的Client類中,要建立起一個使用上下文,就算你暴露在外面的是一個具體的類但是那個類也是一個空殼子。

2.客戶端發送消息的時候要標記上消息的持久化狀態

我們可以在創建隊列的時候設置此隊列是持久化的,但是隊列中的消息要在我們發送某個消息的時候打上需要持久化的狀態標記。

(圖2:標記此消息是需要持久化的)

3.要在監聽的線程入口后加try{}catch{}

(圖1:在線程內部方法中加try{}catch{})

這個點很多做封裝的人會容易忽視掉,我這里補充下為了保持這個文章的完整性。

其實在我之前的“.NET應用架構設計—服務端開發多線程使用小結(多線程使用常識)”一文中有講到過。

這個時候你的try{}catch{}其實是不會捕獲到任何ListenInit方法中的異常的,因為他在另外一個線程上下文中執行的。具體原理這里就不解釋了。但是可以很容易的理解就是,你這個方法一旦執行就會立馬返回了。

4. 初始化的監聽連接的時候要訂閱Shutdown事件記錄下LOG

(圖4:監聽Shutdown事件,記錄下LOG便于排查和監管服務的穩定性)

5. 要在內部定義一個LOG反向注入接口

(圖5:組件內部的LOG接口)

此接口就是你內部用來將信息傳輸出去的渠道,而且這個渠道是活的,有各個應用系統決定怎么記錄。

簡單處理你還需要一個LOG接口服務定位器對象,要不然你拿不到這個接口實例。

(圖6:LOG location對象)

6. 千萬不要使用while(true)接受消息

如果我們是使用死循環的方式在接受消息,那么一旦當你的接受消息的程序出現異常那么你的while直接就會跳出,你的鏈接可能是還鏈接在服務器上但是你的channel已經斷開,說白了你的消息是不會接受到的,而且這樣的開發方法很不穩定也不優雅。我們可以使用面向事件的消費者來接受消息。

(圖7:使用Eventing類型的消費者接受消息)

7.設置一次只接受一個消息,而不是直接LOCK住所有的隊列消息

默認情況下,一個隊列里不管多少消息當你一個TCP連接打上去之后會LOCK住所有的消息,也就是說一個連接徹底占用了所有的消息,此時消息不會被其他集群的機器消費。

(圖8:一次只取一個消息進行消費)

但是如果你對消息的處理的前后順序有要求就不能這么做,你需要獨立注冊一個隊列,然后將這樣的一此只消費一個消息配置話。

8.自動重新連接,不需要手動處理自動連接

(圖9:創建出一個會自動重連的Connection對象)

9.心跳超時時間(集群、高可用部署時至關重要的設置)

(圖10:設置心跳超時時間)

如果你連接單臺節點的時候不設置這個值是沒問題的,但是如果你連接的是類似HAProxy虛擬節點的時候就會出現TCP被斷開的可能性。如果你不設置這個心跳超時時間,它默認是不進行心跳保持的,就會出現網絡中的某個設置斷開空閑的TCP連接資源。就這個問題一直搞的我們的團隊到第二天兩點鐘。大家要記住這個點。

10.消費失敗的消息要重新放入隊列

(圖11:重新放入隊列,推送給其他消費著)

總結:

最后,我是基于Rabbitmq.Client 版本3.5.3.0的基礎上開發的,這個大家要注意。版本不一樣會有一定的差異性。希望此文對大家在使用rabbitmq的同志有一點幫助,謝謝。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩中文字幕在线视频| 性色av一区二区三区红粉影视| 久久精品这里热有精品| 在线精品国产成人综合| 亚洲精品成人久久电影| 日韩欧美黄色动漫| 国产视频精品久久久| 亚洲国产女人aaa毛片在线| 亚洲影院污污.| 亚洲国产另类 国产精品国产免费| 国产日韩在线一区| 亚洲性夜色噜噜噜7777| 91精品国产自产在线| 国产精品视频免费观看www| 国产精品自拍网| 91精品国产综合久久香蕉最新版| 欧美性色xo影院| 九色精品美女在线| 欧美极品美女电影一区| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩电影在线观看免费| 亚洲石原莉奈一区二区在线观看| 久久久久久高潮国产精品视| 国产精品免费看久久久香蕉| xvideos成人免费中文版| 中文字幕久热精品视频在线| 91精品久久久久久综合乱菊| 国产日韩精品视频| 国产女人精品视频| 精品久久久久久久久久ntr影视| 国产精品视频1区| 欧美激情二区三区| 亚洲免费av片| 亚洲精品成人网| 97av在线影院| 久久91精品国产91久久久| 91在线色戒在线| 精品国产乱码久久久久久虫虫漫画| 色婷婷av一区二区三区在线观看| 国产精品最新在线观看| 成人看片人aa| 国产精品入口日韩视频大尺度| 亚洲精选中文字幕| 国产一区二区三区在线播放免费观看| 中文字幕久热精品视频在线| 亚洲成人免费网站| 国产精品视频久久久| 国产精品高清在线观看| 日韩黄在线观看| 日本午夜人人精品| 伊人久久久久久久久久久久久| 亚洲色图综合久久| 亚洲国产精品资源| 国产精品视频网站| 91中文字幕在线观看| 国内精品久久久久影院 日本资源| 中文字幕久热精品在线视频| 亚洲欧美日韩第一区| 国产精品丝袜白浆摸在线| 国产精品一区二区在线| 性欧美xxxx视频在线观看| 国产九九精品视频| 亚洲女人被黑人巨大进入| 5566成人精品视频免费| 91欧美精品午夜性色福利在线| 国产一区二区黑人欧美xxxx| 青草热久免费精品视频| 成人www视频在线观看| 日本乱人伦a精品| 欧美精品亚州精品| 国产成人aa精品一区在线播放| 亚洲人成啪啪网站| 黄色成人在线免费| 国产成人精品免费视频| 久久久精品在线观看| 97精品一区二区视频在线观看| 欧美日韩精品在线视频| 国产精品亚洲片夜色在线| 亚洲欧美综合区自拍另类| 国产精品a久久久久久| 亚洲福利视频网| 亚洲欧美中文另类| 亚洲一级免费视频| 久久久噜噜噜久久中文字免| 亚洲精品98久久久久久中文字幕| 欧美性猛交xxxx乱大交蜜桃| 福利二区91精品bt7086| 亚洲欧美国产日韩中文字幕| 狠狠色狠狠色综合日日小说| 欧美日韩在线看| 午夜精品福利在线观看| 亚洲在线观看视频网站| 97视频人免费观看| 欧美肥老太性生活视频| 久久精品国产一区二区电影| 成年人精品视频| 91地址最新发布| 久久久久久尹人网香蕉| 国产区亚洲区欧美区| 在线观看日韩视频| 欧美性猛交丰臀xxxxx网站| 国产精品国产福利国产秒拍| 欧美日韩中文字幕日韩欧美| 欧美精品999| 色中色综合影院手机版在线观看| 26uuu另类亚洲欧美日本老年| 精品国产老师黑色丝袜高跟鞋| 欧美日韩国产在线看| 欧美www视频在线观看| 成人国产精品免费视频| 亚洲欧美中文字幕| 91禁外国网站| 欧美性生交xxxxx久久久| 欧美一性一乱一交一视频| 日韩欧美国产黄色| 日本精品视频在线播放| 久久九九亚洲综合| 亚洲激情小视频| 91高潮精品免费porn| 95av在线视频| 亚洲毛茸茸少妇高潮呻吟| 97视频在线观看免费| 欧美精品www在线观看| 亚洲精品国精品久久99热| 亚洲一区精品电影| 亚洲午夜av久久乱码| 免费av一区二区| 一区二区亚洲精品国产| 日韩av色在线| 91久久久久久久| 精品久久久一区二区| 久久手机精品视频| 日本精品一区二区三区在线| 国产成人精品在线播放| 91成人免费观看网站| 日韩欧美国产激情| 在线亚洲午夜片av大片| 亚洲一区二区三区久久| 日本不卡免费高清视频| 欧美乱大交做爰xxxⅹ性3| 亚洲自拍av在线| 97视频免费观看| 久久视频在线视频| 57pao成人永久免费视频| 亚洲激情成人网| 久久久久久久久久久免费精品| 日本不卡免费高清视频| 亚洲成色999久久网站| 国内外成人免费激情在线视频网站| 91精品在线一区| 成人有码在线视频| 亚洲欧美日韩一区在线| 高清在线视频日韩欧美| 国产精品日韩在线观看| 国产精品va在线播放我和闺蜜| 日本中文字幕成人| 57pao成人国产永久免费| 日韩av网站导航| 亚洲自拍小视频| 国产精品美女久久久久av超清| 国产免费成人av| 国产精品日韩在线播放| 国精产品一区一区三区有限在线| 国产精品视频精品|