mq全程message queue,用於應用程式和應用程式間進行通訊。rabbitmq採用erlang編寫,實現了amqp(高階訊息佇列)協議,跨平台,支援各種主流的作業系統和多種客戶端。
rabbitmq相比其他同型別的訊息佇列,最大的特點在保證可觀的單機吞吐量的同時,延時方面非常出色。
broker:通俗講就是server,接收客戶端連線,實現amqp協議的訊息佇列和路由功能的程序;
virtual host:虛擬主機,類似於許可權控制組。乙個virtual host裡可以有若干的exchange和queue,但許可權控制的最小粒度是virtual host;
producer:訊息生產者;
consumer:訊息消費者;
queue:儲存訊息的佇列容器;
message:生產者和消費者需要的訊息資料;
connection:乙個tcp連線;
channel:乙個管道連線,是tcp連線內的連線(broker),使用現有的tcp連線進行資料傳輸;
exchange:交換機,訊息路由,生產者傳送的訊息並不是直接傳送到佇列中而是先到指定的路由中,然後由路由根據路由key繫結的佇列傳送到指定佇列中;
binding:建立路由和佇列容器的繫結關係;
routing key:路由key,主要用於尋找佇列。
任何傳送到direct exchange的訊息都會被**到routekey指定的queue。
這種模式下不需要將exchange進行任何繫結(binding)操作。
訊息傳遞時需要乙個「routekey」,可以簡單的理解為要傳送到的佇列名字。
如果vhost中不存在routekey中指定的佇列名,則該訊息會被拋棄。
任何傳送到fanout exchange的訊息都會被**到與該exchange繫結(binding)的所有queue上。
這種模式不需要routekey。
這種模式需要提前將exchange與queue進行繫結,乙個exchange可以繫結多個queue,乙個queue可以同多個exchange進行繫結。
如果接受到訊息的exchange沒有與任何queue繫結,則訊息會被拋棄。
任何傳送到topic exchange的訊息都會被**到所有關心routekey中指定話題的queue上。
就是每個佇列都有其關心的主題,所有的訊息都帶有乙個「標題」(routekey),exchange會將訊息**到所有關注主題能與routekey模糊匹配的佇列。
這種模式需要routekey,也許要提前繫結exchange與queue。
在進行繫結時,要提供乙個該佇列關心的主題。
.「#」表示0個或若干個關鍵字,「*」表示乙個關鍵字。
同樣,如果exchange沒有發現能夠與routekey匹配的queue,則會拋棄此訊息。
headers exchange主要通過傳送的request message中的header進行匹配,其中匹配規則(x-match)又分為all和any,all代表必須所有的鍵值對匹配,any代表只要有乙個鍵值對匹配即可。headers exchange的預設匹配規則(x-match)是any。
在 rabbitmq 官網上提供了 6 中工作模式:簡單模式、工作佇列模式、發布/訂閱模式、路由模式、主題模式 和 rpc 模式。
這兩種模式非常簡單,只涉及生產者、佇列、消費者。
生產者負責生產訊息,將訊息傳送到佇列中,消費者監聽佇列,佇列有訊息就進行消費。
工作佇列模式其實就是有多個消費者的簡單模式。
當有多個消費者時,消費者平均消費佇列中的訊息。
這三種模式就要用到exchange了。
生產者不直接與佇列互動,而是將訊息傳送到交換機中,再由交換機將訊息傳送到已繫結改交換機的佇列中給消費者消費。
常用的交換機型別有 3 種:fanout、direct、topic。
fanout不處理路由鍵,很像子網廣播,每台子網內的主機都獲得了乙份複製的訊息。
發布/訂閱模式就是指使用fanout交換模式。fanout 型別交換機**訊息是最快的。
direct模式處理路由鍵,需要路由鍵匹配才能**。
路由模式使用的是 direct 型別的交換機。
topic:將路由鍵和某模式進行匹配。
主題模式使用的是 topic 型別的交換機。
客戶端傳送乙個請求訊息然後伺服器回覆乙個響應訊息。為了收到乙個響應,我們需要傳送乙個'**'的請求的佇列位址。
RabbitMQ簡介及其安裝
rabbitmq是實現了高階訊息佇列協議 amqp 的開源訊息 軟體 亦稱面向訊息的中介軟體 rabbitmq伺服器是用erlang語言編寫的。發布者 publisher 發布訊息 message 經由交換機 exchange 交換機根據路由規則將收到的訊息分發給與該交換機繫結的佇列 queue 最...
rabbitMq的幾種佇列
這裡是rabbitmq 官網中的相關介紹 其實上篇文章末尾給出的 就是簡單佇列。乙個生產者對應乙個消費者!生產者將訊息傳送到 hello 佇列。消費者從該佇列接收訊息。乙個生產者對應多個消費者,但是只能有乙個消費者獲得訊息!競爭消費者模式。乙個生產者將訊息首先傳送到交換器,交換器繫結到多個佇列,然後...
RabbitMQ中幾種模式
rabbitmq中,所有生產者提交的訊息都由exchange來接受,然後exchange按照特定的策略 到queue進行儲存 rabbitmq提供了四種exchange fanout,direct,topic,header header模式在實際使用中較少,本文只對前三種模式進行比較。效能排序 fa...