最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

RabbitMQ的一些基本組件

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

各種類型交換機(jī)的使用場(chǎng)景

扇形交換機(jī)(Fanout)

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

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

使用場(chǎng)景

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

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

直連交換機(jī)(Direct)

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

使用場(chǎng)景

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

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

主題交換機(jī)(Topic)

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

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

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

關(guān)于延時(shí)隊(duì)列

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

使用官方提供的延時(shí)插件

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

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

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.

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

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

通過死信隊(duì)列來實(shí)現(xiàn)

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

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

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

消息監(jiān)聽

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

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

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

消息可靠性如何保證

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

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

參考資料

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

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

相關(guān)文章

  • Quarkus中RESTEasy?Reactive集成合并master分支

    Quarkus中RESTEasy?Reactive集成合并master分支

    這篇文章主要為大家介紹了Quarkus中RESTEasy?Reactive集成合并master分支的詳細(xì)作用分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • 解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問題

    解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問題

    這篇文章主要介紹了解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringSecurity詳解整合JWT實(shí)現(xiàn)全過程

    SpringSecurity詳解整合JWT實(shí)現(xiàn)全過程

    JWT作為一個(gè)開放的標(biāo)準(zhǔn)(?RFC?7519?),定義了一種簡(jiǎn)潔的,自包含的方法用于通信雙方之間以Json對(duì)象的形式安全的傳遞信息。接下來通過本文給大家介紹springSecurity+jwt實(shí)現(xiàn)互踢功能,需要的朋友可以參考下
    2022-07-07
  • springboot實(shí)現(xiàn)在工具類(util)中調(diào)用注入service層方法

    springboot實(shí)現(xiàn)在工具類(util)中調(diào)用注入service層方法

    這篇文章主要介紹了springboot實(shí)現(xiàn)在工具類(util)中調(diào)用注入service層方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 淺談JAVA工作流的優(yōu)雅實(shí)現(xiàn)方式

    淺談JAVA工作流的優(yōu)雅實(shí)現(xiàn)方式

    這篇文章主要介紹了淺談JAVA工作流的優(yōu)雅實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 淺談Thread.sleep()為什么要拋出中斷異常

    淺談Thread.sleep()為什么要拋出中斷異常

    本文主要介紹了淺談Thread.sleep()為什么要拋出中斷異常,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • SpringBoot入門教程詳解

    SpringBoot入門教程詳解

    SpringBoot?是由?Pivotal?團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡(jiǎn)化?Spring?應(yīng)用的初始搭建以及開發(fā)過程。本文將詳細(xì)為大家講講SpringBoot是使用,需要的可以參考一下
    2022-06-06
  • Javaweb使用cors完成跨域ajax數(shù)據(jù)交互

    Javaweb使用cors完成跨域ajax數(shù)據(jù)交互

    本文由跨域、cors的概念開始,進(jìn)而向大家介紹了Javaweb使用cors完成跨域ajax數(shù)據(jù)交互的相關(guān)內(nèi)容,需要的朋友可以了解下。
    2017-09-09
  • java基本教程之多線程基本概念 java多線程教程

    java基本教程之多線程基本概念 java多線程教程

    多線程是Java中不可避免的一個(gè)重要主體。下面是對(duì)“JDK中新增JUC包”之前的Java多線程內(nèi)容的講解,JUC包是由Java大師Doug Lea完成并在JDK1.5版本添加到Java中的
    2014-01-01
  • SpringBoot集成Redis,并自定義對(duì)象序列化操作

    SpringBoot集成Redis,并自定義對(duì)象序列化操作

    這篇文章主要介紹了SpringBoot集成Redis,并自定義對(duì)象序列化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論

绥芬河市| 宿松县| 疏勒县| 乡城县| 巴青县| 会昌县| 丹凤县| 海安县| 察雅县| 扎囊县| 开江县| 乐东| 安福县| 启东市| 井研县| 囊谦县| 天台县| 泸溪县| 渭源县| 太仆寺旗| 许昌市| 佛冈县| 万源市| 盘锦市| 大庆市| 扶余县| 四子王旗| 河北省| 葵青区| 拉孜县| 闵行区| 青冈县| 武乡县| 聂拉木县| 安陆市| 余姚市| 洞头县| 卢氏县| 改则县| 桦南县| 汽车|