1.架構簡介
rabbitmq主要分為服務端和客戶端兩大塊。
服務端主要由服務節點(broker)構成,服務節點主要包含交換器(exchange)、佇列(queue)
客戶端向服務端傳送和接收資料,分為生產者(producer)、消費者(consumer)
架構圖
資料流程圖
2.訊息
訊息一般包含2個部分:訊息體(payload)和標籤(label)。
訊息體一般是乙個帶有業務邏輯結構的資料,比如乙個json字串。
標籤用來表述這條訊息,比如乙個交換器的名稱和乙個路由鍵。生產者把訊息交由rabbitmq,rabbitmq之後會根據標籤把訊息傳送給感興趣的消費者。
3.生產者和消費者
生產者和消費者都是mq的客戶端。生產者建立訊息,然後發布到 rabbitmq 中;消費者訂閱到相應的佇列上進行訊息的消費。
4.佇列
佇列(queue),是rabbitmq 的內部物件,用於儲存訊息。多個消費者可以訂閱同乙個佇列,這時佇列中的訊息會被平均分攤 (round-robin ,即輪詢)給多個消費者進行處理,而不是每個消費者都收到所有的訊息井處理,如下圖。
佇列-多消費者輪詢
rabbitmq不支援佇列層面的廣播消費,如果需要廣播消費,需要在其上進行二次開發,處理邏輯會變得異常複雜,同時也不建議這麼做。
5.交換器、路由鍵、繫結
交換器(exchange):負責將訊息路由到乙個或者多個佇列中。如果路由不到,或許會返回給生產者,或許直接丟棄。這裡可以將 rabbitmq 中的交換器看作乙個簡單的實體。
路由鍵(routingkey):生產者將訊息發給交換器 的時候,用這個來指定訊息的路由規則(即訊息最終被投遞到哪個消費者),需要與交換器型別和繫結鍵 (bindingkey) 聯合使用才能最終生效。
繫結(binding):在確定了路由鍵、交換器的前提下,再指定乙個繫結鍵(bindingkey )將交換器和佇列進行繫結,這樣就能確定訊息投遞的完整路由。繫結依賴於交換器型別,具體在下一小點(交換器型別)講述。
6.交換器型別
rabbitmq 常用的交換器型別有 fanout 、 direct 、 topic 、 headers 這四種,下面一一闡述。
fanout 把所有傳送到該交換器的訊息路由到所有與該交換器繫結的佇列中。
direct 把訊息路由到那些bindingkey和routingkey完全匹配的佇列中。
topic 與 direct 型別的交換器相似,在匹配規則上進行了擴充套件,用「*」和「#」來進行模糊匹配。
1.routingkey與bindingkey為乙個點號「.」分割的字串,分割的每一部分為乙個單詞。
2.bindingkey中存在「*」和「#」,routingkey根據匹配規則(「*」匹配乙個單詞,「#」匹配多個單詞(可以是零個))將訊息投遞到相 應繫結的佇列中。
例如下圖中,三個bindingkey分別為*.rabbitmq.*、*.*.client、com.#,若現在有乙個routingkey為com.rabbitmq.client,他 將被投遞到queue1和queue2佇列中。
topic型別交換器
headers 功能和direct類似,只是根據傳送的訊息內容中headers屬性進行匹配,效能比較差,一般不會用。
待續。。。
訊息佇列RabbitMQ入門介紹
一 基本概念 rabbitmq是流行的開源訊息佇列系統,用erlang語言開發。我曾經對這門語言挺有興趣,學過一段時間,後來沒堅持。rabbitmq是amqp 高階訊息佇列協議 的標準實現。如果不熟悉amqp,直接看rabbitmq的文件會比較困難。不過它也只有幾個關鍵概念,這裡簡單介紹。rabbi...
訊息佇列 RabbitMQ 一
可以理解為儲存訊息的乙個媒介 或者是個容器,與之相關有兩個概念 即生產者 publish 與消費者 consumer 所謂生產者,就是生產創造訊息的一方,那麼,消費者便是從佇列中取出訊息,完成相應的某種目的。總而言之,訊息佇列是搭建生產者與消費者溝通的一座橋梁。訊息佇列的產品也很多,作用也各有千秋。...
訊息佇列Rabbitmq
rabbitmq server rabbitmqctl reset rabbitmqctl stop rabbitmqctl stop rabbitmqctl list users rabbitmqctl list queues rabbitmqctl add user user name user...