千萬pv網站架構之RabbitMQ

千萬pv網站架構之RabbitMQ

簡介

什麼是RabbitMQ?node

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

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

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

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

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

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

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

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個部分:
一、Exchange持久化,在聲明時指定durable=>1。
二、Queue持久化,在聲明時指定durable=>1。
三、消息持久化,在投遞時指定delivery_mode=>2(1是非持久化)。

RabbitMQ的實際應用

RabbitMQ模式大概分爲如下三種:
一、單一模式。
二、普通模式(默認的集羣模式)。
三、鏡像模式(把須要的隊列作成鏡像隊列,存在於多個節點,屬於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

相關文章
相關標籤/搜索