亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

RabbitMQ交換機使用場景和消息可靠性總結(jié)分析

 更新時間:2023年01月12日 14:50:05   作者:失敗的面  
這篇文章主要為大家介紹了RabbitMQ交換機使用場景和消息可靠性總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

RabbitMQ的一些基本組件

  • Producer:消息的生產(chǎn)者
  • Consumer:消息的消費者
  • Broker:MQ服務(wù)器,管理隊列、消息
  • Message:消息,程序間通訊的數(shù)據(jù)
  • Queue:隊列,消息存放的容器,消息先進先出
  • Exchange:交換機,用于分發(fā)消息

各種類型交換機的使用場景

扇形交換機(Fanout)

發(fā)布/訂閱模式,類似于廣播,交換機將收到的消息發(fā)給多個隊列,消費者如果訂閱了這個隊列的話,就可以收到生產(chǎn)者的消息。生產(chǎn)者不直接與隊列綁定,而且將數(shù)據(jù)發(fā)送至交換機Exchange。

扇形交換機不需要路由鍵,設(shè)置了也沒有作用。

使用場景

如天氣預(yù)報信息,生產(chǎn)者將天氣預(yù)報信息發(fā)送到交換機,網(wǎng)易、新浪等門戶通過各自隊列綁定到該交換機,來獲取推送的消息。

扇形交換機發(fā)布一次可以讓所有消費者收到,但有時候我們需要進行一些數(shù)據(jù)集篩選,比如我只想接收關(guān)于廣東省的天氣預(yù)報,其他省份的忽略,那么我們就需要用到路由或者主題交換機模式。

直連交換機(Direct)

路由模式,通過路由鍵進行匹配,Exchange交換機會根據(jù)路由鍵(RoutingKey)有條件的將數(shù)據(jù)篩選后發(fā)送給隊列

使用場景

日志收集系統(tǒng),收集了info、warn、error三種類型日志,要發(fā)送給對應(yīng)的隊列做處理,如info隊列做記錄,warn和error隊列在info隊列基礎(chǔ)上還要發(fā)送郵件給運維人員,那么可以創(chuàng)建一個直連交換機(Direct),然后綁定三個路由鍵:INFO、WARN、ERROR到三個隊列。

路由模式是一種精準匹配,只有設(shè)置了RoutingKey才可以分發(fā)消息,在實際應(yīng)用中可能會有一些模糊匹配的情況,這時候我們可以用主題交換機來實現(xiàn)。

主題交換機(Topic)

在路由模式上增加了通配符,可以進行路由鍵的模糊匹配,更加靈活的進行消息分發(fā)

通配符:*和#,*代表單個關(guān)鍵字,#代表多個關(guān)鍵字

在實際使用場景中,路由模式的效率高于主題模式,所以可以使用路由模式的時候優(yōu)先使用路由模式。

關(guān)于延時隊列

在Rabbit MQ中實現(xiàn)延時隊列有兩種方式:

使用官方提供的延時插件

具體操作可以看我的這篇文章:docker-compose安裝RabbitMQ及插件

注意:這個插件的使用還是有一定的限制性,官方說:

Current design of this plugin doesn't really fit scenarios with a high number of delayed messages (e.g. 100s of thousands or millions). See #72 for details.

這個插件目前的設(shè)計并不適合有大量延遲消息的場景(例如10萬或數(shù)百萬)。詳見第72條。

所以在大消息場景下可以改用Kafka來實現(xiàn)。

通過死信隊列來實現(xiàn)

如訂單超時功能,創(chuàng)建兩個交換機隊列,一個訂單超時消息,一個訂單消息,訂單超時消息不設(shè)置消費者,僅設(shè)置過期時間,這樣在到期后會轉(zhuǎn)發(fā)給一個交換機Exchange(我們設(shè)置為訂單消息交換機),訂單隊列收到這個轉(zhuǎn)發(fā)就會發(fā)送消息,由此曲線救國的來做到延時消息。

但是死信隊列有個大問題:當往隊列放入一條過期時間是10秒的A消息,再放入一條過期時間是5秒的B消息,等待5秒后B消息并不會優(yōu)先進入死信隊列被消費,而是遵循隊列先進先出規(guī)則,在10秒后A消息過期,A和B一起進入死信隊列被消費。

不過這個問題也好解決,就是固定這個死信隊列的延時時間就好了,比如訂單15分鐘后超時,就全部訂單都是15分鐘后超時,不要有A訂單10分鐘超時,B訂單5分鐘超時的情況,

消息監(jiān)聽

通過監(jiān)聽消息,我們可以實現(xiàn)消息的確認,是一種實現(xiàn)消息可靠性的方案。

如何保證消息不重復(fù)消費

  • 接口 做防重和冪等性保證
  • 保存唯一索引到Redis中,設(shè)置一個短一點的過期時間,消費消息前判斷緩存中是否有數(shù)據(jù),有就說明剛剛已經(jīng)處理過了,這是一條重復(fù)消費

消息可靠性如何保證

  • 生產(chǎn)者提供消息給消費者時使用消息確認機制
  • 消息服務(wù)器的隊列、交換機都進行持久化,保證數(shù)據(jù)不丟失

在消息可靠性上,沒有方法可以保證完全絕對的可靠,所以必要的日志收集一定要做好,實時監(jiān)控,在運維上也要下一些功夫。

參考資料

RabbitMQ六種工作模式與應(yīng)用場景

以上就是RabbitMQ交換機使用場景和消息可靠性總結(jié)分析的詳細內(nèi)容,更多關(guān)于RabbitMQ交換機消息可靠性的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于Java8 Stream API實現(xiàn)數(shù)據(jù)抽取收集

    基于Java8 Stream API實現(xiàn)數(shù)據(jù)抽取收集

    這篇文章主要介紹了基于Java8 Stream API實現(xiàn)數(shù)據(jù)抽取收集,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java 普通代碼塊靜態(tài)代碼塊執(zhí)行順序(實例講解)

    Java 普通代碼塊靜態(tài)代碼塊執(zhí)行順序(實例講解)

    下面小編就為大家?guī)硪黄狫ava 普通代碼塊靜態(tài)代碼塊執(zhí)行順序(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • SpringBoot單元測試框架Mockito介紹及使用

    SpringBoot單元測試框架Mockito介紹及使用

    與集成測試將系統(tǒng)作為一個整體測試不同,單元測試更應(yīng)該專注于某個類。所以當被測試類與外部類有依賴的時候,尤其是與數(shù)據(jù)庫相關(guān)的這種費時且有狀態(tài)的類,很難做單元測試。但好在可以通過“Mockito”這種仿真框架來模擬這些比較費時的類,從而專注于測試某個類內(nèi)部的邏輯
    2023-01-01
  • Java編程中正則表達式的用法總結(jié)

    Java編程中正則表達式的用法總結(jié)

    這篇文章主要介紹了Java編程中正則表達式的用法總結(jié),正則表達式是一種強大的字符串處理工具,Java對正則表達式的支持還是很不錯的,我們先來整理一下正則表達式的一些基礎(chǔ)知識:
    2016-05-05
  • 詳細學(xué)習(xí)Java Cookie技術(shù)(用戶登錄、瀏覽、訪問權(quán)限)

    詳細學(xué)習(xí)Java Cookie技術(shù)(用戶登錄、瀏覽、訪問權(quán)限)

    這篇文章主要為大家詳細介紹了Java Cookie技術(shù),顯示用戶上次登錄的時間、顯示用戶最近瀏覽的若干個圖片(按比例縮放)等,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java并發(fā)編程之線程安全性

    Java并發(fā)編程之線程安全性

    這篇文章主要介紹了Java并發(fā)編程之線程安全性,文章基于Java的相關(guān)內(nèi)容詳細的展開詳細介紹,需要的小伙伴可以參考一下
    2022-04-04
  • Java設(shè)計模塊系列之書店管理系統(tǒng)單機版(三)

    Java設(shè)計模塊系列之書店管理系統(tǒng)單機版(三)

    這篇文章主要為大家詳細介紹了Java單機版的書店管理系統(tǒng)設(shè)計模塊和思想第三章,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 使用MyBatis攔截器實現(xiàn)sql查詢權(quán)限動態(tài)修改代碼實例

    使用MyBatis攔截器實現(xiàn)sql查詢權(quán)限動態(tài)修改代碼實例

    這篇文章主要介紹了使用MyBatis攔截器實現(xiàn)sql查詢權(quán)限動態(tài)修改代碼實例,為了不耦合,現(xiàn)在的方案是在需要鑒權(quán)的Mybatis?Mapper方法上增加一個注解,在運行過程中判斷該注解存在即對sql進行修改,需要的朋友可以參考下
    2023-08-08
  • 詳細理解JAVA面向?qū)ο蟮姆庋b,繼承,多態(tài),抽象

    詳細理解JAVA面向?qū)ο蟮姆庋b,繼承,多態(tài),抽象

    這篇文章主要介紹了Java基礎(chǔ)之面向?qū)ο髾C制(多態(tài)、繼承)底層實現(xiàn),文中有非常詳細的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-07-07
  • Spring MVC常用客戶端參數(shù)接收方式詳解

    Spring MVC常用客戶端參數(shù)接收方式詳解

    這篇文章主要介紹了Spring MVC常用客戶端參數(shù)接收方式詳解,文章主要介紹了幾種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02

最新評論