介紹一下rabbitmq

2020-08-14 11:06:39

介紹一下rabbitmq

RabbitMQ是Erlang語言開發的基於AMQP的一款訊息中介軟體,核心思想是生產者不會將訊息直接發送給佇列,訊息在發送給用戶端時先發送給交換機,然後由交換機轉發給對應的佇列。對路由(Routing),負載均衡(Load balance)、數據持久化都有很好的支援。

它裏邊有5種數據傳遞方式

第一種是簡單模型,一個生產者,一個佇列,一個消費者,佇列只能被一個消費者監聽,所以生產者將訊息發給佇列之後,只能有一個消費者收到訊息

第二種是工作模型,一個生產者,一個佇列,多個消費者,佇列可以被多個消費者監聽,但是生產者將訊息發給佇列之後,還是隻能有一個消費者接收到訊息

後邊三種都叫訂閱模型,這三種裏邊引入了交換機的概念,具體的區分是根據交換機的型別區分的,在這三種模式種,生產者把訊息發送給交換機,交換機不負責儲存訊息,由交換機發送給指定的佇列,消費者監聽佇列消費訊息。

首先是fanout型別,這種叫廣播模式,生產者將訊息發送給交換機,交換機會將訊息轉發給所有系結到到當前交換機的佇列中,對應監聽佇列的消費者都能收到訊息,但是,如果沒有佇列系結到這個交換機,訊息會被mq丟棄。

接着是direct型別,這種叫定向模式,也叫路由模式,這種模式中,佇列在系結交換機的時候,同時指定了自己的routing key,可以理解爲一個路由標示,生產者在發送訊息給交換機的時候,同時指定要發送給的routing key,這時候,交換機就會根據這個routing key來定向的發送給對應的佇列,對應監聽該routing key的佇列的消費者就能收到訊息,但是如果交換機沒有找到對應的routing key,訊息會被丟棄。

最後是topic模式,這種叫萬用字元模式,佇列在系結交換機的時候,同時指定了自己的routing key,生產者在發送訊息給交換機的時候,同時指定要發送給的routing key的萬用字元,一般這個routing key是由多個單詞用.的方式隔開的,萬用字元中,#號可以匹配一個或者多個單詞,*號只能匹配一個單詞,例如生產者指定的萬用字元爲a.#,可以匹配到的routing key有:a.ba.b.c等,如果是a.*的話,只能匹配a.b或者是a.c這樣的routing key。每個佇列系結到交換機的時候可以定義多個routing key,交換機會跟據指定的萬用字元,發送到匹配萬用字元的routing key 對應的佇列中,對應的消費者就可以收到訊息了,但是,如果沒有符合萬用字元的routing key ,訊息會被丟棄

當然,在生產中使用的時候,爲了避免mq宕掉等造成訊息丟失的問題,我們都會設定持久化措施,在rabbitmq裡,需要將交換機持和佇列和訊息持久化,這樣訊息就會被持久化到磁碟中,不會因爲突發的斷電等情況導致訊息丟失