RabbitMQ基礎知識

2022-03-18 12:03:14 字數 2325 閱讀 6609

rabbitmq簡介

rabbitmq是乙個由erlang開發的amqp(advanved message queue protocol)的開源實現。

核心概念

message

訊息,訊息是不具名的,它由訊息頭和訊息體組成。訊息體是不透明的,而訊息頭則由一系列的可選屬性組成,這些屬性包括routing-key(路由鍵)、priority(相對於其他訊息的優先權)、delivery-mode(指出該訊息可能需要永續性儲存)等。

publisher

訊息的生產者,也是乙個向交換器發布訊息的客戶端應用程式。

exchange

交換器,用來接收生產者傳送的訊息並將這些訊息路由給伺服器中的佇列。 exchange有4種型別:direct(預設),fanout, topic, 和headers,不同型別的exchange**訊息的策略有所區別

queue

訊息佇列,用來儲存訊息直到傳送給消費者。它是訊息的容器,也是訊息的終點。乙個訊息可投入乙個或多個佇列。訊息一直在佇列裡面,等待消費者連線到這個佇列將其取走。

binding

繫結,用於訊息佇列和交換器之間的關聯。乙個繫結就是基於路由鍵將交換器和訊息佇列連線起來的路由規則,所以可以將交換器理解成乙個由繫結構成的路由表。 exchange 和queue的繫結可以是多對多的關係。

connection

網路連線,比如乙個tcp連線。

channel

通道,多路復用連線中的一條獨立的雙向資料流通道。通道是建立在真實的tcp連線內的虛擬連線,amqp 命令都是通過通道發出去的,不管是發布訊息、訂閱佇列還是接收訊息,這些動作都是通過通道完成。因為對於作業系統來說建立和銷毀 tcp 都是非常昂貴的開銷,所以引入了通道的概念,以復用一條 tcp 連線。

onsumer

訊息的消費者,表示乙個從訊息佇列中取得訊息的客戶端應用程式。

virtual host

虛擬主機,表示一批交換器、訊息佇列和相關物件。虛擬主機是共享相同的身份認證和加密環境的獨立伺服器域。每個 vhost 本質上就是乙個 mini 版的 rabbitmq 伺服器,擁有自己的佇列、交換器、繫結和許可權機制。vhost 是 amqp 概念的基礎,必須在連線時指定,rabbitmq 預設的 vhost 是 / 。

broker

表示訊息佇列伺服器實體

rabbitmq執行機制

exchange分發訊息時根據型別的不同分發策略有區別,目前共四種型別:direct、fanout、topic、headers 。headers 匹配 amqp 訊息的 header 而不是路由鍵, headers 交換器和 direct 交換器完全一致,但效能差很多,目前幾乎用不到了,所以直接看另外三種型別:

directexchange(指定佇列):

訊息中的路由鍵(routing key)如果和 binding 中的 binding key 一致, 交換器就將訊息發到對應的佇列中。路由鍵與佇列名完全匹配,如果乙個佇列繫結到交換機要求路由鍵為「dog」,則只** routing key 標記為「dog」的訊息,不會**「dog.puppy」,也不會**「dog.guard」等等。它是完全匹配、單播的模式。

fanoutexchange(所有佇列):每個發到 fanout 型別交換器的訊息都會分到所有繫結的佇列上去。fanout 交換器不處理路由鍵,只是簡單的將佇列繫結到交換器上,每個傳送到交換器的訊息都會被**到與該交換器繫結的所有佇列上。很像子網廣播,每台子網內的主機都獲得了乙份複製的訊息。fanout 型別**訊息是最快的。

topicexchange(規則匹配佇列):topic 交換器通過模式匹配分配訊息的路由鍵屬性,將路由鍵和某個模式進行匹配,此時佇列需要繫結到乙個模式上。它將路由鍵和繫結鍵的字串切分成單詞,這些單詞之間用點隔開。它同樣也會識別兩個萬用字元:符號「#」和符號「*」。#匹配0個或多個單詞,*匹配乙個單詞。

RabbitMQ基礎知識

什麼是mq?mq全稱為message queue,訊息佇列 mq 是一種應用程式對應用程式的通訊方法。mq是消費 生產者模型的乙個典型的代表,一端往訊息佇列中不斷寫入訊息,而另一端則可以讀取佇列中的訊息。rabbitmq是mq的一種。下面詳細介紹一下rabbitmq的基本概念。1 佇列 生產者 消費...

RabbitMQ基礎知識詳解

什麼是mq?mq全稱為message queue,訊息佇列 mq 是一種應用程式對應用程式的通訊方法。mq是消費 生產者模型的乙個典型的代表,一端往訊息佇列中不斷寫入訊息,而另一端則可以讀取佇列中的訊息。rabbitmq是mq的一種。下面詳細介紹一下rabbitmq的基本概念。1 佇列 生產者 消費...

RabbitMQ基礎知識詳解

什麼是mq?mq全稱為message queue,訊息佇列 mq 是一種應用程式對應用程式的通訊方法。mq是消費 生產者模型的乙個典型的代表,一端往訊息佇列中不斷寫入訊息,而另一端則可以讀取佇列中的訊息。rabbitmq是mq的一種。下面詳細介紹一下rabbitmq的基本概念。1 佇列 生產者 消費...