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

消息隊列MQ使用詳解

 更新時間:2024年10月12日 11:00:36   作者:Lvan的前端筆記  
消息隊列(MQ)是一種基于“先進先出”原則的數(shù)據(jù)結(jié)構(gòu),廣泛應用于分布式系統(tǒng)中,主要用于應用解耦、異步消息處理和流量削峰,消息隊列中間件通過允許生產(chǎn)者發(fā)送消息到隊列,消費者從隊列中拉取消息或訂閱消息,實現(xiàn)高效、可擴展和最終一致性的系統(tǒng)架構(gòu)

什么是消息隊列MQ

MQ(Message Queue)消息隊列,是基礎數(shù)據(jù)結(jié)構(gòu)中“先進先出”的一種數(shù)據(jù)結(jié)構(gòu)。指把要傳輸?shù)臄?shù)據(jù)(消息)放在隊列中,用隊列機制來實現(xiàn)消息傳遞——生產(chǎn)者產(chǎn)生消息并把消息放入隊列,然后由消費者去處理。

消費者可以到指定隊列拉取消息,或者訂閱相應的隊列,由MQ服務端給其推送消息。

作用

消息隊列中間件是分布式系統(tǒng)中重要的組件,主要解決應用解耦,異步消息,流量削鋒等問題,實現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu)。

  • 解耦:一個業(yè)務需要多個模塊共同實現(xiàn),或者一條消息有多個系統(tǒng)需要對應處理,只需要主業(yè)務完成以后,發(fā)送一條MQ,其余模塊消費MQ消息,即可實現(xiàn)業(yè)務,降低模塊之間的耦合。
  • 異步:主業(yè)務執(zhí)行結(jié)束后從屬業(yè)務通過MQ,異步執(zhí)行,減低業(yè)務的響應時間,提高用戶體驗。
  • 削峰:高并發(fā)情況下,業(yè)務異步處理,提供高峰期業(yè)務處理能力,避免系統(tǒng)癱瘓。

缺點

1、系統(tǒng)可用性降低。依賴服務也多,服務越容易掛掉。需要考慮MQ癱瘓的情況

2、系統(tǒng)復雜性提高。需要考慮消息丟失、消息重復消費、消息傳遞的順序性

3、業(yè)務一致性。主業(yè)務和從屬業(yè)務一致性的處理

主要產(chǎn)品

主要的 MQ 產(chǎn)品包括:RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ、Kafka、IBM WebSphere 等。

比較火的是 RocketMQ 和 Kafka。

分別應用在 web 和大數(shù)據(jù)

舉例

1、例一

一個實際的使用消息隊列(MQ)的例子是電商網(wǎng)站的訂單處理系統(tǒng)。在電商網(wǎng)站中,用戶下單后需要經(jīng)過一系列的處理流程,包括訂單驗證、庫存檢查、支付處理、物流跟蹤等。這些處理流程需要多個模塊之間進行協(xié)作,而且每個模塊都需要處理大量的訂單數(shù)據(jù)。

為了解決這些問題,可以使用消息隊列系統(tǒng)來實現(xiàn)訂單處理流程的異步處理。具體來說,可以將訂單數(shù)據(jù)發(fā)送到一個訂單處理隊列中,然后由不同的模塊從隊列中獲取訂單數(shù)據(jù)進行處理。這樣就可以將訂單數(shù)據(jù)的發(fā)送和接收者進行解耦,實現(xiàn)了系統(tǒng)的高可靠性、可伸縮性和可維護性。

舉個例子,當用戶下單后,訂單系統(tǒng)會將訂單數(shù)據(jù)發(fā)送到訂單處理隊列中,然后庫存系統(tǒng)會從隊列中獲取訂單數(shù)據(jù)進行庫存檢查,支付系統(tǒng)會從隊列中獲取訂單數(shù)據(jù)進行支付處理,物流系統(tǒng)會從隊列中獲取訂單數(shù)據(jù)進行物流跟蹤等。這些模塊之間可以并行處理訂單數(shù)據(jù),而且每個模塊都可以獨立地進行擴展和升級,從而實現(xiàn)了系統(tǒng)的高可用性和可伸縮性。

另外,由于電商網(wǎng)站的訂單數(shù)據(jù)量可能非常大,使用消息隊列可以實現(xiàn)削峰填谷,平滑處理訂單請求,從而保證系統(tǒng)的可用性和穩(wěn)定性。此外,使用消息隊列還可以實現(xiàn)訂單數(shù)據(jù)的緩存和延遲處理,以提高系統(tǒng)的性能和吞吐量。

總之,使用消息隊列可以使得電商網(wǎng)站的訂單處理系統(tǒng)更加高效、可靠和可維護,是現(xiàn)代電商系統(tǒng)中必不可少的技術(shù)。

例二

在線游戲中的多人游戲場景同步。在多人游戲中,多個玩家之間需要實時同步游戲場景的狀態(tài),包括角色位置、狀態(tài)、動作等,同時還需要處理玩家之間的交互、碰撞等復雜場景邏輯。

為了實現(xiàn)這樣的實時場景同步,可以使用消息隊列來處理游戲場景事件的分發(fā)和處理。具體來說,可以將游戲場景中的事件(如玩家移動、攻擊、技能釋放等)封裝成消息,然后通過消息隊列進行廣播,讓所有參與游戲的客戶端都能夠接收到相應的消息,并根據(jù)消息內(nèi)容來更新本地的游戲狀態(tài)。

使用消息隊列的好處在于,它可以將游戲場景事件的發(fā)送和接收者進行解耦,從而提高系統(tǒng)的可擴展性和可維護性。同時,由于消息隊列可以處理大量的消息,還可以應對高并發(fā)的場景,并且能夠削峰填谷,提高系統(tǒng)的穩(wěn)定性和可用性。

在多人游戲中,使用消息隊列還可以實現(xiàn)一些高級功能,比如實現(xiàn)延遲同步、反作 弊等。比如,可以將游戲場景中的事件緩存到消息隊列中,并設置一定的延遲時間后再進行處理,以確保所有玩家都能夠接收到相同的游戲狀態(tài)。此外,還可以使用消息隊列來監(jiān)控和過濾玩家的行為,以檢測和防范作弊行為。

綜上所述,使用消息隊列可以實現(xiàn)多人游戲場景的實時同步,并提高系統(tǒng)的可擴展性、可維護性和穩(wěn)定性,是現(xiàn)代游戲開發(fā)中的重要技術(shù)。

例三

用戶注冊后,需要發(fā)注冊郵件和注冊短信,傳統(tǒng)的做法有兩種

  • 1.串行的方式;
  • 2.并行的方式 ;
  • 3.消息隊列

(1)串行方式:將注冊信息寫入數(shù)據(jù)庫后,發(fā)送注冊郵件,再發(fā)送注冊短信,以上三個任務全部完成后才返回給客戶端。這有一個問題是,郵件,短信并不是必須的,它只是一個通知,而這種做法讓客戶端等待沒有必要等待的東西。

(2)并行方式:將注冊信息寫入數(shù)據(jù)庫后,發(fā)送郵件的同時,發(fā)送短信,以上三個任務完成后,返回給客戶端,并行的方式能提高處理的時間。

(3)消息隊列
引入消息隊列后,把發(fā)送郵件,短信不是必須的業(yè)務邏輯異步處理。

例四:流量削峰

秒殺活動,一般會因為流量過大,導致應用掛掉,為了解決這個問題,一般在應用前端加入消息隊列。

用戶的請求,服務器收到之后,首先寫入消息隊列,加入消息隊列長度超過最大值,則直接拋棄用戶請求或跳轉(zhuǎn)到錯誤頁面。秒殺業(yè)務根據(jù)消息隊列中的請求信息,再做后續(xù)處理。

發(fā)布訂閱 vs MQ

發(fā)布訂閱模式和消息隊列(MQ)都是在分布式系統(tǒng)中廣泛使用的消息傳遞機制,它們都具有將發(fā)送者和接收者解耦的優(yōu)點。

雖然這兩種模式在某些方面相似,但它們也有一些重要的區(qū)別。

誰負責管理消息?

  • 在發(fā)布訂閱模式中,消息的發(fā)送者不需要知道消息的接收者,而是將消息發(fā)送到一個主題(Topic),然后所有訂閱該主題的訂閱者都會接收到該消息。主題的管理通常由發(fā)布者負責。
  • 在消息隊列中,消息的發(fā)送者將消息發(fā)送到隊列中,然后訂閱該隊列的訂閱者會按照隊列中的消息順序進行消費。隊列的管理通常由消息隊列系統(tǒng)負責。

消息如何分發(fā)?

  • 在發(fā)布訂閱模式中,消息是通過主題進行分發(fā)的,所有訂閱該主題的訂閱者都會接收到相同的消息。這種方式可以使得多個訂閱者同時接收到同一份消息。
  • 在消息隊列中,消息是通過隊列進行分發(fā)的,每個消息只會被一個訂閱者接收。這種方式可以確保每個訂閱者都能夠接收到所有消息,但是無法讓多個訂閱者同時接收到同一份消息。

如何處理消息丟失?

  • 在發(fā)布訂閱模式中,如果某個訂閱者沒有及時接收到消息,它將無法再次獲取到該消息。這可能會導致消息丟失。
  • 在消息隊列中,消息通常會被持久化到磁盤上,以確保即使在消息消費者宕機的情況下,消息也不會丟失。如果某個消費者無法消費某個消息,該消息將被保留在隊列中,直到可以被正確地處理為止。

用例場景

  • 發(fā)布訂閱模式通常適用于一些事件驅(qū)動的應用場景,例如消息推送、實時數(shù)據(jù)處理等。
  • 消息隊列則適用于一些流量高、性能穩(wěn)定的場景,例如電商交易、訂單處理、日志處理等。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis SQL運行流程源碼詳解

    Mybatis SQL運行流程源碼詳解

    這篇文章主要介紹了Mybatis SQL運行流程源碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • SpringMVC中的常用注解和用法舉例詳解

    SpringMVC中的常用注解和用法舉例詳解

    在Spring和SpringMVC中,注解的使用大大簡化了配置,提高了代碼的可讀性和可維護性,這篇文章主要給大家介紹了關(guān)于SpringMVC中常用注解和用法的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Java設計模式之java外觀模式詳解

    Java設計模式之java外觀模式詳解

    這篇文章主要介紹了Java設計模式之外觀模式(Facade模式)介紹,外觀模式(Facade)的定義:為子系統(tǒng)中的一組接口提供一個一致的界面,需要的朋友可以參考下
    2021-09-09
  • java、php、C#、asp實現(xiàn)短信群發(fā)功能的方法

    java、php、C#、asp實現(xiàn)短信群發(fā)功能的方法

    這篇文章主要介紹了java、php、C#、asp實現(xiàn)短信群發(fā)功能的方法,以實例形式較為詳細的分析了java及php、C#、asp、VB.NET等調(diào)用短信發(fā)送接口進行短信發(fā)送的功能,需要的朋友可以參考下
    2015-02-02
  • vue3使用vue-diff工具來比較數(shù)據(jù)差異

    vue3使用vue-diff工具來比較數(shù)據(jù)差異

    這篇文章主要為大家詳細介紹了vue3如何使用vue-diff工具來比較數(shù)據(jù)差異,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-11-11
  • 微信小程序之搜索分頁功能的實現(xiàn)代碼

    微信小程序之搜索分頁功能的實現(xiàn)代碼

    這篇文章主要介紹了微信小程序之搜索分頁功能的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • springboot2.6.3讀取不到nacos上的配置文件問題

    springboot2.6.3讀取不到nacos上的配置文件問題

    這篇文章主要介紹了springboot2.6.3讀取不到nacos上的配置文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • spring boot封裝HttpClient的示例代碼

    spring boot封裝HttpClient的示例代碼

    這篇文章主要介紹了spring boot封裝HttpClient的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java Class 解析器實現(xiàn)方法示例

    Java Class 解析器實現(xiàn)方法示例

    這篇文章主要通過對class文件的分析,介紹了Java Class 解析器實現(xiàn)方法示例,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • Java中超過1000萬數(shù)據(jù)就自動轉(zhuǎn)為科學計數(shù)法的原因分析與解決方案

    Java中超過1000萬數(shù)據(jù)就自動轉(zhuǎn)為科學計數(shù)法的原因分析與解決方案

    在 Java 開發(fā)中,你是否遇到過這樣的場景:當數(shù)值達到 1000 萬(10^7)時,原本期望的整數(shù)格式突然變成了1.0E7這樣的科學計數(shù)法?本文將深入分析背后的原因,并提供 3 種實用解決方案,幫你徹底解決這個問題,需要的朋友可以參考下
    2026-03-03

最新評論

黄龙县| 呈贡县| 富宁县| 驻马店市| 墨脱县| 泉州市| 高台县| 仙桃市| 江安县| 博野县| 云安县| 吴桥县| 中山市| 永州市| 奈曼旗| 茶陵县| 成都市| 彰武县| 宿迁市| 嘉兴市| 宁乡县| 寻乌县| 勃利县| 东乌珠穆沁旗| 西畴县| 恩平市| 梁山县| 荣成市| 淮北市| 社旗县| 梧州市| 丘北县| 湛江市| 文安县| 堆龙德庆县| 大安市| 诸暨市| 渭源县| 寿宁县| 陆川县| 水富县|