MQ訊息佇列_RabbitMQ

mi_zy發表於2020-02-22

MQ訊息佇列中介軟體— Rabbit MQ

訊息中介軟體主要用於元件之間的解耦,訊息的傳送者無需知道訊息使用者的存在,反之亦然。訊息(Message)是指在應用間傳送的資料。訊息可以非常簡單,比如只包含文字字串,也可以更復雜,可能包含嵌入物件。是用於業務解耦的情況,其它常見場景包括最終一致性、廣播、錯峰流控等等。訊息傳送與接受的雙方遵守這個協議可以實現非同步通訊。

https://blog.csdn.net/cdefggg/article/details/88375249

官方模擬器:

路由轉發。生產者Producer在傳送訊息時,都需要指定一個RoutingKey和Exchange,Exchange收到訊息後可以看到訊息中指定的RoutingKey,再根據當前Exchange的ExchangeType,按一定的規則將訊息轉發到相應的queue中去。

1、 Message Quene是應用程式對應用程式的通訊方法。非同步RPC的主要手段之一。不需要直接呼叫彼此來通訊。

2、Rabbit MQ(開源訊息代理)是實現AMQP(應用層開放標準advanced message queuing protocal提供統一訊息服務)協議的MQ產品。

3、訊息的生產者Producer--->訊息佇列----->訊息的消費者

4、 安裝 Rabbit MQ:windows計算機名用英文,關閉安全軟體:   

        1)Erlang環境(程式語言): opt_win64_17.3.exe

            

        2)按照RabbitMQ服務: rabbitmq-server-3.4.1.exe

5、安裝完測試:開啟 rabbitMQ command prompt

    輸入rabbitmq-plugins enable rabbitmq_management啟動後臺服務軟體,瀏覽器輸入127.0.0.1:15672 ,使用者名稱/密碼:guest/guest

6、overview:顯示訊息佇列,節點,路徑,埠( AMQP埠5672,叢集埠25672,web管理埠15672

        connections:

        channels:資料通道(持久化的佇列在管理頁面可以看到有個“D”,durable為true)

        exchanges:交換機,型別,可以新增交換機。

            點選Exchange的Name可進入到Exchange的詳情頁面,在裡面將Exchange與Queue進行Binding

            測試: 點進交換器之後有一欄是Publish message傳送成功後切換到Queues檢視是否收到訊息,點選ls佇列進去檢視, 展開Get message選項,點選GetMessage(s)就能得到訊息了。

            測試: https://blog.csdn.net/qq_41097820/article/details/88793329

        quenes:佇列

                    Message

      • Ready: 佇列中等待消費的訊息
      • Unacked:佇列中等待被確認的訊息(此時訊息已到達消費者,但是未被確認)
      • Total:佇列中訊息總數

        admin:新增使用者等,Tags指角色;新增virtual host(關聯到使用者access,起隔離作用,每個vhost本質上就是一個mini版的rabbitmq伺服器,擁有自己的佇列、交換機、繫結和許可權機制)。

7、MQ中的最小物件:訊息=訊息描述符+使用者資料,佇列定義的長度制約訊息的長度。佇列:先進先出FIFO,對遠端佇列的訪問需要使用”通道“。包含關係:訊息<佇列<佇列管理器,三者組合唯一確定一個訊息。

一般一個Message有兩個部分:payload(有效載荷)和label(標籤),payload顧名思義就是傳輸的資料,label是exchange的名字或者說是一個tag,它描述了payload,而且RabbitMQ也是透過這個label來決定把這個Message發給哪個Consumer

8、通道:應用在佇列管理器與佇列管理器之間的,單向的點對點的通訊連線:

  •     單一方向;

  •     通常成對使用;

如果要在  佇列管理器與佇列管理器之間實現訊息傳輸,必須在兩個佇列管理器上都要定義相應的通道。

9、RabbitMQ中生產者將訊息傳送到Exchange(交換器),由Exchange將訊息路由到一個或多個Queue中(或者丟棄)。RabbitMQ中透過Binding將Exchange與Queue關聯起來,這樣RabbitMQ就知道如何正確地將訊息路由到指定的Queue了。

10、對於rabbitmq來說,一個broker可以看成一個rabbitmq服務節點,,或者服務例項。也可以將一個broker看做一臺rabbitmq伺服器

11、rabbitmq有一個最大記憶體閾值,可以透過配置來實現。當接收的訊息達到最大閾值時,rabbitmq不會再接收訊息,並進入阻塞狀態。rabbitmq有一個記憶體換頁閾值,當達到換頁閾值時,將當前記憶體內的訊息放入到磁碟內,而此時會區分持久化訊息和非持久化訊息。持久化訊息因為在接收到訊息後就已經存入磁碟,所以在換頁時不會重複存入磁碟。此時只會將非持久化訊息存入到磁碟內。

12、當記憶體使用超過配置的閾值或者磁碟剩餘空間低於配置的閾值時,rabbitmq會出現告警。此時會暫時阻塞客戶端連線(顯示blocked),並停止接收客戶端發來的訊息,以避免伺服器崩潰,客戶端與服務端的心跳檢測也會失效。

13、傳送可靠性:確保訊息成功傳送到broker

        At most once:最多一次,訊息可能會丟失,但不會重複傳輸

        At least once:最少一次,訊息不會丟失,但可能重複傳輸

        Exactly once:恰好一次,保證每條訊息都被傳輸到broker且僅傳輸一次

RabbitMQ支援:At most once和At least once

14、abbitMQ的六種工作模式:

  • 1、Work queues

  • 2、Publish/subscribe

  • 3、Routing

  • 4、Topics

  • 5、Header 模式

  • 6、RPC

15、Exchange Types有 fanout、direct、topic、headers這四種型別:

*queue對load balance的處理是完美的。對於多個Consumer來說,RabbitMQ 使用迴圈的方式(round-robin)的方式均衡的傳送給不同的Consumer。

        fanout型別:廣播模式,Exchange路由規則非常簡單,它會把所有傳送到該Exchange的訊息路由到所有與它繫結的Queue中。

        direct型別: Exchange路由規則也很簡單,它會把訊息路由到那些binding key與routing key完全匹配的Queue中,binding key == routing key。(在繫結(Binding)Exchange與Queue的同時,一般會指定一個Binding key;但Binding key並不是在所有情況下都生效,它依賴於Exchange Type)

        topic message型別:binding key like routing key, 其中routing key中可以帶 * 和 # 來做模糊匹配, “*”用於匹配一個單詞,“#”用於0~N個單詞.

        headers型別: Exchange不依賴於routing key與binding key的匹配規則來路由訊息,而是根據傳送的訊息內容中的headers屬性進行匹配。

*:Virtual host:即虛擬主機

當多個不同的使用者使用同一個RabbitMQ server提供的服務時,可以劃分出多個vhost,每個使用者在自己的vhost建立exchange/queue


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7970627/viewspace-2676779/,如需轉載,請註明出處,否則將追究法律責任。

相關文章