概念
什么是rabbitmq?
RabbitMQ是實現AMQP(高級消息隊列協議)的消息中間件的一種,主要是為了實現系統之間的雙向解耦。用人話來說,就是發消息和接收消息
要它有什么卵用?
能夠降低系統之間的耦合,并且在分布式領域中轉發存儲消息,可作為一個中間存儲介質,角色類似于CPU的L2緩存
業界中各種消息隊列有什么區別?
名詞解析
-
Virtual Host:
包含若干個Exchange和Queue,表示一個節點;Vhost之間相互完全隔離,不同Vhost之間無法共享Exchange和Queue。因此Vhost之間數據無法共享和分享。如果要實現這種功能,需要Vhost之間手動構建對應代碼邏輯
-
**Exchange(交換機): **
接受客戶端發送的消息,并根據Binding將消息路由給服務器中的隊列,只做交換消息,存儲功能交由queue實現,Exchange分為direct, fanout, topic三種。
- direct:轉發消息到routigKey指定的隊列
- topic:按規則轉發消息(最靈活)
- headers:(這個還沒有接觸到)
- fanout:轉發消息到所有綁定隊列
Exchange的綁定功能,可以綁定queue,也可以綁定Exchange。這個看具體業務了。
如果綁定數據,需要在分發或者重新被分派,使用To Exchange綁定。如果要被直接處理,使用queue綁定。
如果Exchange綁定了Queue,如果Route Key不對,也會導致數據不可達,被丟掉。(一個數據可以被Queue處理,需要Exchange綁定Queue,并且在Message發送的時候,Route Key 與綁定的Key相等。) Binding: 連接Exchange和Queue,包含路由規則。
Queue: 消息隊列,存儲還未被消費的消息。
隊列的屬性:
- 持久性:如果啟用,隊列將會在server重啟前都有效。
- 自動刪除:如果啟用,那么隊列將會在所有的消費者停止使用之后自動刪除掉自身。
- 惰性:如果沒有聲明隊列,那么在執行到使用的時候會導致異常,并不會主動聲明。
- 排他性:如果啟用,隊列只能被聲明它的消費者使用。
- Message: Header+Body
- Channel: 通道,執行AMQP的命令;一個連接可創建多個通道以節省資源。
搭建RabbitMQ服務
- 在win7下搭建
Paste_Image.png
先去rabbitMQ官方網站,安裝 Erlang,然后安裝rabbitmq-server,相比于linux,windows下就是傻瓜化,安裝完畢后,直接啟動rabbitmq-server服務,即可
Paste_Image.png
然后在瀏覽器訪問:http://127.0.0.1:15672/ 即可訪問rabbitmq的Web管理界面,linux下需要手動安裝,詳見下方
- 在ubuntu下搭建
本節主要簡要總結rabbitmq的入門知識與概念