rabbitmq基本原理及搭建單機環境
1、RabbitMQ基本原理
1、MQ全稱Message Queue,是一種分布式應用程序的通信方法,是消費-生產者模型的典型代表,producer向消息隊列中不斷寫入消息,而另一端consumer則可以讀取或者訂閱隊列中的消息。業務上可以實現:
(1)項目之間的模塊解耦,降低項目耦合度;
(2)實現異步功能,如功能執行成功後發短信、發郵件等,當請求時間過長時,也可用於防止前端請求超時;
(3)並發削峰,針對某一時刻突發性並發,可以先將producer生產的消息發送到隊列中,consumer逐一取出消息進行消費,防止項目因並發量大卡頓;
(4)日誌處理;
(5)消息通訊。
2、AMQP
RabbitMQ是基於AMQP協議實現的,AMQP相當於一個標準,全稱Advanced Message Queue(高級消息隊列協議)。它是應用層協議的一個開放標準,為面向消息的中間件設計,基於此協議的客戶端與消息中間件可傳遞消息,不受產品、開發語言等條件的限制。
3、vhost
為什麽要用虛擬主機?RabbitMQ server 可以說就是一個消息隊列服務器實體(Broker),Broker當中可以有多個用戶(增加用戶的命令),而用戶只能在虛擬主機的粒度進行權限控制,所以RabbitMQ中需要多個虛擬主機。每一個RabbitMQ服務器都有一個默認的虛擬主機“/”。
4、Queue
隊列是消息通信的基礎模塊
(1)隊列可以存儲消息,在consumer未進行消費前,消息可存於隊列中;
(2)隊列與交換機間通過routing_key綁定後,只能收到與routing_key對應的消息,可以起到消息歸類作用。
5、exchange
交換機指定消息按不同的規則路由到不同的隊列。可以將其理解成路由表。
交換機可以存在多個,每個交換機在自己獨立的進程中運行,增加多個交換機相當於增加多個進程,可以充分利用服務器上的CPU核以便達到更高的效率。
交換機四種類型:
(1)Fanout
廣播模式,不需要routing_key將exchange和queue進行綁定,直接將exchange內的消息發送給所有queue,類似微信公眾號的訂閱功能,只要訂閱此公眾號,就會收到公眾號發布的所有消息
(2)direct
直聯模式,通過精確匹配消息的路由關鍵字,將消息路由到零個或者多個隊列中,綁定關鍵字用來將隊列和交換器綁定到一起。這讓我們可以構建經典的點對點隊列消息傳輸模型,不過和任何已定義的交換器類型一樣,當消息的路由關鍵字與多個綁定關鍵字匹配時,消息可能會被發送到多個隊列中。
(3)topic
主題模式,處理路由鍵,按模式匹配路由鍵。模式符號 "#" 表示一個或多個單詞,"*" 僅匹配一個單詞。如 "wood.#" 可匹配 "wood.palm.redwood",但 "wood.*" 只匹配 "wood.deadwood"。
主題式交換器類型提供了這樣的路由機制:通過消息的路由關鍵字和綁定關鍵字的模式匹配,將消息路由到被綁定的隊列中。這種路由器類型可以被用來支持經典的發布/訂閱消息傳輸模型——使用主題名字空間作為消息尋址模式,將消息傳遞給那些部分或者全部匹配主題模式的多個消費者。
(4)headers(未使用過此種模式,略)
6、bind
綁定器可以交換機和隊列串聯起來,交換機通過綁定器可以將消息路由到指定的隊列中,可以將將綁定器理解為路由器的路由規則
7、RabbitMQ特點
(1)可靠性
rabbtimq使用一些機制保證可靠性,防止消息丟失,如:持久化機制、消息確認機制等
(2)集群模式
多個rabbitmq服務器可以組成一個集群,防止服務down掉影響項目運行
(3)高可用
隊列可以在集群中的機器上進行鏡像,使得在部分節點出問題的情況下隊列仍然可用。
(4)管理界面
提供強可視化管理界面,即使不熟悉MQ原理的開發人員也可以通過可視化管理界面進行MQ的相關操作
8、防止消息丟失邏輯圖
防止MQ中消息丟失一直被開發人員廣泛關註,MQ內部持久化機制可以防止消息丟失,但是同時也會降低MQ性能,因此需要在代碼邏輯中進行部分相關處理
2、搭建單機MQ
1、安裝erlang
yum -y install erlang
2、安裝rabbitmq
yum install -y rabbitmq-server
3、安裝插件
啟動web管理界面 rabbitmq-plugins enable rabbitmq_management 增加訪問用戶,默認用戶guest只能本地訪問。 rabbitmqctl add_user admin 123456 設置角色: rabbitmqctl set_user_tags admin administrator 設置默認vhost(“/”)訪問權限 rabbitmqctl set_permissions -p "/" admin "." "." ".*" 瀏覽器訪問:http://IP:15672 用戶名admin,密碼123456進行登錄
rabbitmq基本原理及搭建單機環境