RabbitMq 基本概念

2021-09-25 07:25:00 字數 2317 閱讀 5364

rabbitmq是乙個基於amqp的訊息佇列, 訊息佇列的主要目的實現訊息的生產者和消費者之間的解耦,支援多應用之間的非同步協調工作。開發語言:erlang – 面向併發的程式語言。

首先來一張訊息佇列的經典圖,可以劃分為三個角色: producer, queue, consumer

看到這個模型,如果對jdk的容器有一定的了解,很容易可以想到借助arrayblockingqueue或者listblockingqueue就可以實現簡易的訊息佇列(也就是我們常說的生產者-消費者模型)

其實在生活中,這種模型用得非常多,就比如我們都會接觸的網購快遞,可以說是乙個典型的訊息佇列的case了:

商家不斷的把商品扔給快遞公司(注意不是直接將商品給買家),而快遞公司則將商品根據地質分發對應的買家

對上面這個過程進行拆解,可以對映扮演的角色

那麼快遞公司時怎麼知道要把商品給對應的買家呢?根據包裹上的位址+**

通過上面的例項對比,發現基本的訊息佇列定義的元素太少,這裡則正好可以看一下rabbitmq是怎麼具體來實現訊息佇列的

內部結構圖

上面是一些專業的概念,那麼可以怎麼對映到前面的快遞上呢?

生產者,將訊息投遞給exchange,然後由exchange將訊息路由到對應的queue上,供消費者消費,那麼這個路由有哪些方式呢?

訊息中的路由鍵(routing key)如果和 binding 中的 binding key 一致, 交換器就將訊息發到對應的佇列中

簡單來講,就是路由鍵與佇列名完全匹配

舉例說明

exchange和兩個佇列繫結在一起:

從上圖也可以看出,這種策略,將忽略所謂的routing key,將訊息分發到所有繫結的queue上,更加類似我們理解的廣播模式

topic 交換器通過模式匹配分配訊息的路由鍵屬性,將路由鍵和某個模式進行匹配,此時佇列需要繫結到乙個模式上

可以理解為直接策略的高階版,直接策略是完全精確匹配,而topic則支援正則匹配,滿足某類指定規則的(如以***開頭的路由鍵),可以鍵訊息分發過去

乙個更直觀的例項如下

producer傳送訊息時需要設定routing_key,

這個實際上用得不多,它是根據message的一些頭部資訊來分發過濾message,忽略routing key的屬性,如果header資訊和message訊息的頭資訊相匹配

主要使用的訊息分發策略有三個,直接,路由和扇形,簡單的小結下應用場景和區別

a. direct exchange

直接完全匹配模式,適用於精準的訊息分發

b. topic exchange

routing key的匹配模式,支援routing key的模糊匹配方式,更適用於多類訊息的聚合

c. fanout exchange

忽略routing key, 將訊息分配給所有的queue,廣播模式,適用於訊息的復用場景

訊息佇列的乙個重要指標,當有消費者獲取了訊息之後,對這個訊息我應該怎麼辦?是直接刪除還是等某個合適的機會再刪除?又或者是乾脆不刪除,就留著了?

在實際的應用場景中,訊息正常消費之後,我們希望的是這個訊息就不要了,但是消費的過程中如果出現了bug,則希望不要刪除訊息,等我修復這個bug後,可以把這個訊息重新的投遞給我

consumer接收到了訊息之後,必須返回乙個ack的標誌,表示訊息是否成功消費,如果返回true,則表示消費成功了,然後這個訊息就會從rabbitmq的佇列中刪掉;如果返回false,且設定為重新入隊,則這個訊息可以被重新投遞進來

通常實際編碼中,預設是自動ack的,如果訊息的重要性程度較高,我們應該設定為主動ack,在接收到訊息之後,自主的返回對應的ack資訊

RabbitMQ基本概念

總結一下傳送接收訊息的過程 www.wuxidoudizhu.com 通過上面例子對rabbitmq有乙個感性認識後,現在來介紹rabbitmq中的基本概念。broker 訊息佇列伺服器實體 訊息 每個訊息都有乙個路由鍵 routing key 的屬性。就是乙個簡單的字串。connection 應用...

RabbitMQ 基本概念

amqp 核心概念 exchange 作用 是 amqp 和 rabbitmq 的核心元件 根據繫結關係和路由鍵為訊息提供路由,將訊息 至相應的佇列 有四種型別 direct topic fanout headers 使用較少 direct exchange 當 routing key 和 bind...

Rabbit MQ基本概念介紹

rabbitmq介紹 rabbitmq是乙個訊息中介軟體,是乙個很好用的訊息佇列框架,這裡有幾個關鍵的名詞 connectionfactory connection channel都是rabbitmq對外提供的api中最基本的物件。connection是rabbitmq的socket鏈結,它封裝了s...