1. 程式人生 > >rabbitmq基本原理及搭建單機環境

rabbitmq基本原理及搭建單機環境

影響 sum 限制 lang ons 基本 miss 消費者 瀏覽器

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基本原理及搭建單機環境