RabbitMQ基礎理解

2022-09-22 02:51:08 字數 3133 閱讀 8816

rabbitmq基本理解

(1)rabbitmq簡介

mq全稱為message queue, 訊息佇列(mq)是一種應用程式對應用程式的通訊方法。應用程式通過讀寫出入佇列的訊息(針對應用程式的資料)來通訊,而無需專用連線來鏈結它們。訊息傳遞指的是程式之間通過在訊息中傳送資料進行通訊,而不是通過直接呼叫彼此來通訊,直接呼叫通常是用於諸如遠端過程呼叫的技術。排隊指的是應用程式通過 佇列來通訊。佇列的使用除去了接收和傳送應用程式同時執行的要求。

rabbitmq是使用erlang語言開發的開源訊息佇列系統,基於amqp協議來實現。amqp的主要特徵是面向訊息、佇列、路由(包括點對點和發布/訂閱)、可靠性、 安全。amqp協議更多用在企業系統內,對資料一致性、穩定性和可靠性要求很高的場景,對效能和吞吐量的要求還在其次。

mq是訊息中介軟體,常見的有rabbitmq,kafka,rocketmq,activemq 等,用於分布式系統中。作用有三點

rabbitmq 整體上是乙個生產者,消費者模型,主要負責接收,儲存和**訊息。

生產者生產訊息將訊息傳送給路由,路由根據路由規則匹配將訊息寫入到佇列中,然後消費者訂閱並進行訊息的消費。

(2)rabbitmq使用場景

1. 解耦(為面向服務的架構(soa)提供基本的最終一致性實現)

傳統模式的缺點:

引入訊息佇列

基於訊息的模型,關心的是「通知」,而非「處理」。

簡訊、郵件通知、快取重新整理等操作使用訊息佇列進行通知。

訊息佇列和rpc的區別與比較:

場景說明:使用者註冊後,需要發註冊郵件和註冊簡訊。傳統的做法有兩種1.序列的方式;2.並行方式(1)序列方式:將註冊資訊寫入資料庫成功後,傳送註冊郵件,再傳送註冊簡訊。以上三個任務全部完成後,返回給客戶端

(2)並行方式:將註冊資訊寫入資料庫成功後,傳送註冊郵件的同時,傳送註冊簡訊。以上三個任務完成後,返回給客戶端。

與序列的差別是,並行的方式可以提高處理的時間

引入訊息佇列,將不是必須的業務邏輯,非同步處理。改造後的架構如下:

流量削峰也是訊息佇列中的常用場景,一般在秒殺或團搶活動中使用廣泛

應用場景:系統其他時間a系統每秒請求量就100個,系統可以穩定執行。系統每天晚間八點有秒殺活動,每秒併發請求量增至1萬條,但是系統最大的處理能力只能每秒處理1000個請求,於是系統崩潰,伺服器宕機。

之前架構:大量使用者(100萬使用者)通過瀏覽器在晚上八點高峰期同時參與秒殺活動。大量的請求湧入我們的系統中,高峰期達到每秒鐘5000個請求,大量的請求打到mysql上,每秒鐘預計執行3000條sql。但是一般的mysql每秒鐘扛住2000個請求就不錯了,如果達到3000個請求的話可能mysql直接就癱瘓了,從而系統無法被使用。但是高峰期過了之後,就成了低峰期,可能也就1萬使用者訪問系統,每秒的請求數量也就50個左右,整個系統幾乎沒有任何壓力。

引入mq:100萬使用者在高峰期的時候,每秒請求有5000個請求左右,將這5000請求寫入mq裡面,系統a每秒最多只能處理2000請求,因為mysql每秒只能處理2000個請求。系統a從mq中慢慢拉取請求,每秒就拉取2000個請求,不要超過自己每秒能處理的請求數量即可。mq,每秒5000個請求進來,結果只有2000個請求出去,所以在秒殺期間(將近一小時)可能會有幾十萬或者幾百萬的請求積壓在mq中。

關於流量削峰:秒殺系統流量削峰這事兒應該怎麼做?

這個短暫的高峰期積壓是沒問題的,因為高峰期過了之後,每秒就只有50個請求進入mq了,但是系統還是按照每秒2000個請求的速度在處理,所以說,只要高峰期一過,系統就會快速將積壓的訊息消費掉。我們在此計算一下,每秒在mq積壓3000條訊息,1分鐘會積壓18萬,1小時積壓1000萬條訊息,高峰期過後,1個多小時就可以將積壓的1000萬訊息消費掉。

優點就是以上的那些場景應用,就是在特殊場景下有其對應的好處,解耦、非同步、削峰。

系統引入的外部依賴越多,系統越容易掛掉,本來只是a系統呼叫bcd三個系統介面就好,abcd四個系統不報錯整個系統會正常執行。引入了mq之後,雖然abcd系統沒出錯,但mq掛了以後,整個系統也會崩潰。

引入了mq之後,需要考慮的問題也變得多了,如何保證訊息沒有重複消費?如何保證訊息不丟失?怎麼保證訊息傳遞的順序?

a系統傳送完訊息直接返回成功,但是bcd系統之中若有系統寫庫失敗,則會產生資料不一致的問題。

所以總結來說,訊息佇列是一種十分複雜的架構,引入它有很多好處,但是也得針對它帶來的壞處做各種額外的技術方案和架構來規避。引入mq系統複雜度提公升了乙個數量級,但是在有些場景下,就是複雜十倍百倍,還是需要使用mq。

RabbitMQ實戰 理解訊息通訊

前段時間總結完了 深入淺出mybatis 系列,對mybatis有了更全面和深入的了解,在掘金社群也收到了一些博友的喜歡,很高興。另外,短暫的陪產假就要結束了,小寶也二周了,下周二就要投入工作了,希望自己盡快調整過來,加油努力。從本篇開始總結 rabbitmq實戰 系列的閱讀筆記,rabbitmq是...

自己學習RabbitMQ的理解

訊息佇列 messagequeue,簡稱mq 是在訊息的傳輸過程中儲存訊息的容器。mq框架非常之多,比較流行的有rabbitmq activemq zeromq kafka,以及阿里開源的rocketmq。從社群活躍度,按照目前網路上的資料,rabbitmq activemq zeromq 三者中,...

RabbitMQ實戰 理解訊息通訊

rabbitmq是乙個開源的訊息 和佇列伺服器,可以通過基本協議在完全不同的應用之間共享資料,可以將作業排隊以便讓分布式服務進行處理。本篇介紹下訊息通訊,首先介紹基礎概念,將這些概念對映到amqp協議,然後介紹訊息持久化 傳送方確認模式等訊息可靠性保證。通過本篇介紹,你會了解到 訊息通訊概念 此部分...