入門消息中間件RabbitMQ!

學習過activemq的同學可能會理解起RabbitMQ的相關概念會比較快!慢慢來!

 

什麼 是RabbitMQ:

RabbitMQ 是一個由 Erlang 語言開發的 AMQP 的開源實現。

AMQP Advanced Message Queue,高級消息隊列協議。它是應用層協議的一個開放
標準,爲面向消息的中間件設計,基於此協議的客戶端與消息中間件可傳遞消息,並不
受產品、開發語言等條件的限制。

RabbitMQ 用於在分佈式系統中存儲轉發消息,在易用性、擴展
性、高可用性等方面表現不俗。具體特點包括:

1.可靠性

Rabbitmq使用一些機制來保證,可靠性,比如持久化,傳輸協議,發佈確認。

2.路由靈活

在消息進入隊列之前,通過 Exchange 來路由消息的。對於典型的路由功能,RabbitMQ
已經提供了一些內置的 Exchange 來實現。針對更復雜的路由功能,可以將多個
Exchange 綁定在一起,也通過插件機制實現自己的 Exchange

3.消息集羣

多個rabbitma服務器可以組成一個集羣,形成一個邏輯Broker(經紀人)

4.高可用

隊列可以在集羣中的機器上面進行鏡像,使得在部分節點出問題的時候還是可以用的。

5.多語言客戶端

rabbitmq幾乎支持所有常用語言,比如java,.net還有啥呢,www.baidu.com

6.跟蹤機制

假如消息有異常,mq可以去跟蹤異常。

RabbitMQ的主要概念:

RabbitMQ Server: 它是一種傳輸服務,他的作用就是維護一條生產到消費的路線,保證數據的傳輸。

Producer: 消息生產者,如圖A、B、C,數據的發送方。消息生產者連接RabbitMQ服
務器然後將消息投遞到Exchange。

Consumer:消息消費者,如圖1、2、3,數據的接收方。消息消費者訂閱隊列,
RabbitMQ將Queue中的消息發送到消息消費者。

Exchange:生產者將消息發送到Exchange(交換器),由Exchange將消息路由到一個
或多個Queue中(或者丟棄)。Exchange並不存儲消息。RabbitMQ中的Exchange有
direct、fanout、topic、headers四種類型,每種類型對應不同的路由規則。


Queue:(隊列)是RabbitMQ的內部對象,用於存儲消息。

消息消費者就是通過訂閱隊列來獲取消息的,
RabbitMQ中的消息都只能存儲在Queue中,生產者生產消息並最終
投遞到Queue中,消費者可以從Queue中獲取消息並消費。多個消費者可以訂閱同一個
Queue,這時Queue中的消息會被平均分攤給多個消費者進行處理,而不是每個消費者
都收到所有的消息並處理。

RoutingKey(關鍵詞):生產者在將消息發送給Exchange的時候,一般會指定一個routing key,
來指定這個消息的路由規則,而這個routing key需要與Exchange Type及binding key聯
合使用才能最終生效。在Exchange Type與binding key固定的情況下(在正常使用時一
般這些內容都是固定配置好的),我們的生產者就可以在發送消息給Exchange時,通過
指定routing key來決定消息流向哪裏。RabbitMQ爲routing key設定的長度限制爲255
bytes。

Connection: (連接):Producer和Consumer都是通過TCP連接到RabbitMQ Server
的。以後我們可以看到,程序的起始處就是建立這個TCP連接。

Channels: (信道):它建立在上述的TCP連接中。數據流動都是在Channel中進行
的。也就是說,一般情況是程序起始建立TCP連接,第二步就是建立這個Channel

VirtualHost:權限控制的基本單位,一個VirtualHost裏面有若干Exchange和
MessageQueue,以及指定被哪些user使用

關於安裝教程:https://www.cnblogs.com/ericli-ericli/p/5902270.html

默認的用戶:guest密碼:guest

 

上面幾個大分類分別是:概覽、連接、信道、交換器、隊列、用戶管理

 

RabbitMq的幾種模式:這幾種模式跟路由密切關聯:

直接模式(Direct)

通俗的講就是2個傻吊一個密室聊天其他人不知道他們在聊啥!

任何發送到Direct Exchange的消息都會被轉發到RouteKey中指定的Queue。這句話上面意思呢,就是任何發送的直接路由都會根據關鍵字也就是隊列的名字。在消費的時候指定了隊列名的類會被觸發!這句話等下看代碼就理解了!

1.一般情況可以使用rabbitMQ自帶的Exchange:”"(該Exchange的名字爲空字符串,下
文稱其爲default Exchange)。
2.這種模式下不需要將Exchange進行任何綁定(binding)操作
3.消息傳遞時需要一個“RouteKey”,可以簡單的理解爲要發送到的隊列名字。
4.如果vhost中不存在RouteKey中指定的隊列名,則該消息會被拋棄。

來一波手動創建隊列:

 

 

Durability:是否做持久化 Durable(持久) transient(臨時)

Auto delete : 是否自動刪除

 

代碼實現消息的生產和消費,這個是我的碼雲地址:https://gitee.com/xiaosuhao/rabbitmq

還有一木有完善!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章