RabbitMQ最全詳解(圖文全面總結)
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
消息中間件是高并發(fā)架構的基石,之前談過了RocketMQ和Kafka,今天接著詳解RabbitMQ消息中間件@mikechen RabbitMQRabbitMQ是一款使用Erlang語言開發(fā)的,實現(xiàn)了高級消息隊列協(xié)議(AMQP)的開源消息中間件。 AMQP,即Advanced Message Queuing Protocol,高級消息隊列協(xié)議是應用層協(xié)議的一個開放標準,為面向消息的中間件設計。 Erlang語言,主要用于并發(fā)及分布式系統(tǒng)的開發(fā),在電信領域應用廣泛,OTP作為Erlang語言的一部分,包含了很多基于Erlang開發(fā)的中間件及工具庫。 RabbitMQ特點1.可靠性:RabbitMQ使用一些機制來保證可靠性, 如持久化、傳輸確認及發(fā)布確認等。 2.靈活的路由 :在消息進入隊列之前,通過交換器來路由消息。 3.擴展性:多個RabbitMQ節(jié)點可以組成一個集群,也可以根據(jù)實際業(yè)務情況動態(tài)地擴展 集群中節(jié)點。 4.高可用性:隊列可以在集群中的機器上設置鏡像,使得在部分節(jié)點出現(xiàn)問題的情況下隊 列仍然可用。 5.多種協(xié)議:RabbitMQ除了原生支持AMQP協(xié)議,還支持STOMP, MQTT等多種消息 中間件協(xié)議。 6.多語言客戶端:RabbitMQ 幾乎支持所有常用語言,比如 Java、 Python、 Ruby、 PHP、 C#、 JavaScript 等。 RabbitMQ架構設計RabbitMQ架構,如下圖所示: RabbitMQ架構會涉及如下模型:Producer、Consumer、Queue、Exchange、Broker、RoutingKey、BindingKey。
RabbitMQ架構模型1.Producer消息生產(chǎn)者Producer:主要就是生成消息,通過信道(Channel),把消息發(fā)送給交換機(Exchange)。 消息一般可以包含 2 個部分:
2.Consumer這個大家也比較清楚,就是消息消費者,就是接受消息的程序。 消費者監(jiān)聽RabbitMQ中的(Queue)隊列中的消息,然后去消費。 備注:消息(Message)會一直留在隊列里,直到被消費者(Consumer)消費。 3.Queue用于存儲消息,如下圖所示: RabbitMQ 的生產(chǎn)者生產(chǎn)消息并最終投遞到隊列中,消費者可以從隊列中獲取消息并消費。 RabbitMQ中消息都只能存儲在隊列中,這一點和Kafka這種消息中間件相反。 多個消費者可以訂閱同一個隊列,這時隊列中的消息會被平均分攤給多個消費者進行處理,如下圖所示:
4.Exchange生產(chǎn)者將消息發(fā)送到Exchange,由交換器將消息路由到一個或者多個隊列中。 如下圖所示: 這里的交互機會涉及如下四種類型:
不同的類型有著不同的路由策略。 5.Broker可以將一個RabbitMQ Broker看作一臺RabbitMQ服務器,如下圖所示: 上圖展示了消息從生產(chǎn)者存入RabbitMQ Broker,以及消費者從Broker中消費數(shù)據(jù)的完整過程。 6.Routing Key生產(chǎn)者將消息發(fā)給交換器的時候,一般會指定一個 RoutingKey,用來指定這個消息的路由規(guī)則。 如下圖所示: 生產(chǎn)者可以在發(fā)送消息給交換器時,通過指定 RoutingKey 來決定消息流向哪里。 7.BindingKeyRabbitMQ 中通過綁定將交換器與隊列關聯(lián)起來,在綁定的時候一般會指定一個綁定鍵(BindingKey),這樣 RabbitMQ 就知道如何正確地將消息路由到隊列了。 閱讀原文:原文鏈接 該文章在 2025/7/1 23:57:58 編輯過 |
關鍵字查詢
相關文章
正在查詢... |