千萬pv網站架構之RabbitMQ

千萬pv網站架構之RabbitMQ

簡介

什麼是RabbitMQ?

MQ全稱爲Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用鏈接來連接它們。消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用於諸如遠程過程調用的技術。排隊指的是應用程序通過 隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。

RabbitMQ幾個關鍵的概念的說明:

Broker:簡單來說就是消息隊列服務器實體。

Exchange:消息交換機,它指定消息按什麼規則,路由到哪個隊列。

Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列。

Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來。

Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。

vhost:虛擬主機,一個broker裏可以開設多個vhost,用作不同用戶的權限分離。

producer:消息生產者,就是投遞消息的程序。

consumer:消息消費者,就是接受消息的程序。

channel:消息通道,在客戶端的每個連接裏,可建立多個channel,每個channel代表一個會話任務。

消息隊列的使用過程:

(1)、客戶端連接到消息隊列服務器,打開一個Channel(消息通道)。
(2)、客戶端聲明一個Exchange(消息交換機),並設置相關屬性。
(3)、客戶端聲明一個Queue(消息隊列載體),並設置相關屬性。
(4)、客戶端使用一個Routing Key(路由關鍵字),在Exchange和Queue之間建立好綁定關係。
(5)、客戶端投遞消息到Exchange。
Exchange接收到消息後,就根據消息的Key和已經設置的Binding,進行消息路由,將消息投遞到一個或者多個隊列裏。

RabbitMQ的使用場景

RabbitMQ支持消息的持久化,也就是數據寫在磁盤上。
消息隊列的持久化包括3個部分:
1、Exchange持久化,在聲明時指定durable=>1。
2、Queue持久化,在聲明時指定durable=>1。
3、消息持久化,在投遞時指定delivery_mode=>2(1是非持久化)。

RabbitMQ的實際應用

RabbitMQ模式大概分爲以下三種:
1、單一模式。
2、普通模式(默認的集羣模式)。
3、鏡像模式(把需要的隊列做成鏡像隊列,存在於多個節點,屬於RabbitMQ的HA方案,在對業務可靠性要求較高的場合中比較實用)。

實驗部署

主機名 IP地址 系統用途
CentOS7-1(MQ01) 172.16.10.138 磁盤節點
CentOS7-2(MQ02) 172.16.10.147 內存節點
CentOS7-5(MQ03) 172.16.10.146 內存節點
  • 設置每臺服務器的hosts解析文件,添加以下內容

vim /etc/hosts

172.16.10.138   RabbitMQ01
172.16.10.147   RabbitMQ02
172.16.10.146   RabbitMQ03
  • 設置每臺服務器的hostname

mq01.localdomain #依次爲mq02 mq03

  • 配置安裝帶有RabbitMQ的epel源

yum -y install epel-release

  • 使用yum倉庫安裝RabbitMQ軟件

yum install -y rabbitmq-server

  • 相關配置及開啓服務
/usr/lib/rabbitmq/bin/rabbitmq-plugins list       #查看插件安裝情況

/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management      #啓用rabbitmq_management服務

systemctl  start  rabbitmq-server    #開啓服務

rabbitmqctl cluster_status      #檢查三臺的集羣狀態,目前相互獨立,沒有形成集羣。

Cluster status of node rabbit@mq01 ...
[{nodes,[{disc,[rabbit@mq01]}]},               
 {running_nodes,[rabbit@mq01]},         #可以看到此時,是並沒有集羣的
 {cluster_name,<<"rabbit@mq01">>},
 {partitions,[]}]
...done

千萬pv網站架構之RabbitMQ

  • 集羣部署(兩臺內存節點上配置)
rabbitmqctl stop_app

rabbitmqctl join_cluster --ram rabbit@mq01     #加入到磁盤節點

rabbitmqctl start_app 

rabbitmqctl cluster_status            #驗證集羣狀態

千萬pv網站架構之RabbitMQ

  • 網頁登錄rabbitmq的web管理頁面查看

千萬pv網站架構之RabbitMQ

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