999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于AMQP的分布式系統消息可靠傳輸方案的設計與實現

2024-01-19 04:12:46魏連秋張義紅張建光邢春燕
數字通信世界 2023年12期
關鍵詞:機制消費者

魏連秋,張義紅,張建光,馬 倩,邢春燕,劉 偉

(1.衡水學院數學與計算機科學系,河北 衡水 053000;2.衡水學院馬克思主義學院,河北 衡水 053000)

消息傳輸過程中,可能會出現網絡異常、程序異常、機器異常等各種突發情況,無法保證消息正常傳輸。一條消息從生產到消費的整個過程中有生產者生產、消息代理存儲、消費者消費三個過程需要保證消息的可靠性。通過對消息傳輸流程進行分析,發現若能保證生產過程可靠性、消息代理存儲過程可靠性、消費過程可靠性,則基本可以實現消息傳輸的可靠性。本文通過對現有消息中間件實現機制的分析,在遵循AMQP協議的基礎上,結合實際業務應用場景,權衡消息的可靠傳輸,對消息生產過程、消息代理存儲過程、消息消費過程三個過程進行分析,提出一種分布式系統中消息可靠性傳輸方案,實現消息傳輸的高可靠性[1]。

1 消息生產可靠性

在生產者發出消息之后可能會出現網絡擁塞、服務器宕機等突發問題,從而導致消息的丟失。如果不對消息生產過程的可靠性加以設計,生產者將無法感知消息是否已正常送達消息代理,進而將導致消息的丟失。如果消息在生產過程中,能感知到傳輸過程中消息傳輸失敗,生產者可以進行重新傳輸等后續動作以確保消息生產過程的可靠性。因此,在消息生產過程中,設計一種高級發布確認方案以保證消息生產可靠性是十分必要的。

1.1 publisher confirm機制

RabbitMQ提供了publisher confirm機制來避免消息發送到MQ過程中丟失,這種機制要給每個消息指定一個唯一ID,消息發送到MQ以后,會返回一個結果給發送者,表示消息是否發送成功。

publisher發送消息的配置為publisher-confirmtype。這里支持兩種類型:一種是simple:同步等待confirm結果,直到超時;另一種是correlated:異步回調,定義ConfirmCallback,MQ返回結果時會回調這個ConfirmCallback。相對而言,異步確認性價比較高,因而在此采用correlated:異步回調。

(1)消息成功發送到交換機,如圖1所示返回ack。

圖1 消息成功投遞到交換機

(2)消息未成功投遞到交換機,如圖2所示返回nack。

圖2 消息未成功發送到交換機

在僅開啟publisher confirm機制的情況下,交換機接收到消息后,會直接給消息生產者發送確認信息,如果發現該消息不可路由,那么消息會被直接丟棄,此時生產者是不知道消息被丟棄了。這顯然不是我們所希望的,于是提出mandatory+publish-return方案。

1.2 mandatory+publish-return方案

設置mandatory參數可以在當消息傳輸過程中不可達目的地時將消息返回給生產者。可以使用如圖3所示方案,當把mandatory參數設置為true時,如果交換機無法將消息進行路由時,會將該消息返回給生產者,當把該參數設置為false時,如果發現消息無法進行路由,則直接丟棄。

圖3 mandatory+publish-return方案

在只使用mandatory參數的情況下,如果交換機無法將消息進行路由時會提示Returned message but no callback available,說明設置mandatory參數后,如果消息無法被路由,則會返回給生產者,此時是通過回調的方式進行的,但由于還沒有回調函數,所以生產者需要設置相應的回調函數才能接受該消息。此時就需要設置生產者回執:publisher-return,實現一個ReturnCallback接口,這樣當消息傳輸到交換機而沒有路由到隊列時,就返回ACK及路由失敗原因。此時再運行則Returned message but no callback available提示消息,而可以看到生產者接收到了被退回的消息,并帶上了消息被退回的原因:NO_ROUTE。

有了mandatory+publisher-return方案,我們獲得了對無法路由消息的感知能力,此時我們可以通過日志的形式得到反饋并手動重新處理。但實際上,這樣做無形中增加了生產者的復雜性,需要添加處理這些被退回的消息的邏輯。如果既不想增加生產者的復雜性,又不丟失消息,怎么辦?在RabbitMQ中,有一種備份交換機的機制存在,可以較好地解決這一問題。

2 消息消費可靠性

消息消費可靠性是指在分布式系統中,保證消息在傳輸和處理過程中不會丟失或重復,為了實現可靠的消息消費,一般采取如下措施。

2.1 消息確認機制

RabbitMQ為了能夠把消息正確發送給消費者,提供了消息確認機制,即告訴RabbitMQ消息已經收到,使用消息確認機制可以使消費者成功處理消息后再從隊列中刪除該消息。

消費者獲取消息后,應該向RabbitMQ發送ACK回執,表明自己已經處理該消息。若出現這樣的場景:RabbitMQ傳輸消息給消費者,消費者獲取消息后返回ACK,RabbitMQ刪除消息,此時消費者突然宕機消息未成功處理,這樣,消息就丟失了。因此消費者返回ACK的時機非常重要。一般RabbitMQ允許配置三種確認模式:①none:關閉ACK,RabbitMQ假定消費者獲取消息后會成功處理,消息傳輸后立即被刪除,此種模式下消息傳輸是不可靠的,可能丟失,因而不可??;②auto:自動ACK,由spring監測listener代碼是否出現異常,沒有異常則返回ACK。此種模式類似于事務機制;③manual:手動ACK,需要在業務代碼結束后,手動調用API發送ACK,這種模式需要根據具體情況,判斷什么時候發送ACK,使用較為復雜。綜合考慮推薦使用默認的auto模式[2]。

2.2 消費者端限流

當消息數量變得過多或處理速度變慢時,可以使用消費者端限流來控制消息的傳遞速率。通過限制消息的最大數量或大小避免消費者宕機,從而提高消費者的可靠性。

3 方案設計與實現

為了保障分布式系統中消息可靠性傳輸,筆者設計了如下解決方案。

生產者發送消息給交換機,若不能發送成功則利用publisher confirm機制重新傳輸,若交換機不能成功將消息路由到隊列則利用備份交換機機制將消息傳輸到指定隊列進行消費;若消費者不能成功消費消息則利用延遲重試機制在指定次數內進行循環延遲重試;若循環結束仍舊不能成功消費則利用死信交換機將消息傳輸到死信隊列進行消費。其中的交換機、隊列設置均設為持久的,消息視具體情況而定,使用如圖4所示傳輸方案,這樣可最大限度保證消息可靠性傳輸與消費。

圖4 發布確認+帶重試次數延遲消費的可靠性傳輸方案

生產端核心代碼如下:

4 結束語

在消費端對消息的處理邏輯中,還應考慮冪等性,即對同一條消息多次處理所產生的結果應該是相同的,這樣出現重復處理的情況也不會對系統產生影響。另外,在分布式環境中,我們還可以采用副本集群模式,即在RabbitMQ集群中,多個節點會同步存儲隊列中的消息,如果某個節點發生故障,其他節點可以接替它繼續處理數據,從而防止消息丟失。通過以上解決方案的合理選擇和組合,可以提高RabbitMQ性能和可靠性,從而確保分布式系統的穩定性和可用性。

猜你喜歡
機制消費者
構建“不敢腐、不能腐、不想腐”機制的思考
系無理取鬧?NO! 請為消費者擦干眼淚
人民交通(2019年16期)2019-12-20 07:03:52
日化品牌怎樣才能吸引年輕消費者?
消費導刊(2018年22期)2018-12-13 09:19:00
自制力是一種很好的篩選機制
文苑(2018年21期)2018-11-09 01:23:06
只用一招 讓喊產品貴的消費者閉嘴
知識付費消費者
定向培養 還需完善安置機制
中國衛生(2016年9期)2016-11-12 13:28:08
悄悄偷走消費者的創意
悄悄偷走消費者的創意
破除舊機制要分步推進
中國衛生(2015年9期)2015-11-10 03:11:12
主站蜘蛛池模板: 在线看AV天堂| 国产高清又黄又嫩的免费视频网站| 女高中生自慰污污网站| 一级爱做片免费观看久久| 欧美天堂在线| 亚洲精品男人天堂| 国产在线精彩视频二区| 欧美日韩在线成人| 国产成年女人特黄特色毛片免 | 欧美亚洲国产精品第一页| 久久精品一卡日本电影| 日韩黄色在线| 欧洲熟妇精品视频| 无码专区国产精品第一页| 国产一国产一有一级毛片视频| 亚洲一区波多野结衣二区三区| 欧美一级在线| 国产又粗又猛又爽视频| 亚洲av无码人妻| 无码av免费不卡在线观看| 国产亚洲视频在线观看| av在线手机播放| 久久香蕉国产线看观| 亚洲自拍另类| 欧美一道本| 亚洲精品另类| 国产精品无码影视久久久久久久| 日韩av无码DVD| 一本无码在线观看| 国产精品综合久久久| 国产网站在线看| 狠狠色狠狠色综合久久第一次| 亚洲国产日韩视频观看| 一区二区三区国产精品视频| 色欲不卡无码一区二区| 狠狠色丁香婷婷综合| 中国国产高清免费AV片| 在线无码私拍| 好久久免费视频高清| 91国内外精品自在线播放| 亚洲aaa视频| 欧美日韩综合网| 国产探花在线视频| 91精品国产综合久久不国产大片| 伊人色综合久久天天| 亚洲热线99精品视频| 91精品啪在线观看国产91九色| 国产在线精品网址你懂的| 人人爽人人爽人人片| 一区二区自拍| 91日本在线观看亚洲精品| 欧美成人区| 久久国产精品国产自线拍| 在线五月婷婷| 欧美精品v欧洲精品| 亚洲不卡av中文在线| 美女被躁出白浆视频播放| 国产精品男人的天堂| 亚洲精品高清视频| 美女内射视频WWW网站午夜| 91外围女在线观看| 國產尤物AV尤物在線觀看| 中文字幕亚洲电影| 日韩在线影院| 四虎影视8848永久精品| 夜夜操狠狠操| 欧美精品1区2区| 91青青在线视频| 国产欧美日韩在线一区| 国产亚洲精| 日本道中文字幕久久一区| 国产成人精品亚洲日本对白优播| 91免费国产高清观看| 在线精品亚洲国产| 精品国产免费观看| 在线另类稀缺国产呦| 久久永久免费人妻精品| 99re在线观看视频| 国产欧美另类| 美女国内精品自产拍在线播放 | 久久人搡人人玩人妻精品| 四虎永久免费网站|