1. 程式人生 > >千萬PV 網站架構之 RabbitMQ 消息列隊

千萬PV 網站架構之 RabbitMQ 消息列隊

連接 top -- blog 等等 應用程序 linu 發送 nodes

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

MQ特點

  • MQ是消費-生產者模型的一個典型的代表,一端往消息隊列中不斷寫入消息,而另一端則可以讀取或者訂閱隊列中的消息。MQ和JMS類似,但不同的是JMS是SUN JAVA消息中間件服務的一個標準和API定義,而MQ則是遵循了AMQP協議的具體實現和產品。

RabbitMQ 結構圖 :

技術分享圖片

  • Exchange : 消息交換機,它指定消息按什麽規則,路由到那個列隊。
  • Queue : 消息列隊載體,每個消息都會被投入到一個或多個列隊中。
  • Routing Key : 路由關鍵字,Exchange 根據這個關鍵字進行消息投遞。

消息列隊的使用過程 :

  • 1.客戶端連接到消息列隊服務器,打開一個 Channel(消息通道)。
  • 2.客戶端聲明一個 Exchange,並設置相關屬性。
  • 3.客戶端聲明一個 Queue ,並設置相關屬性。
  • 4.客戶端使用 Routing Key,在 Exchange和 Queue之間建立好綁定關系。
  • 5.客戶端投遞消息到 Exchange。

本案環境 :

主機名 系統 IP地址 防火墻和SELinux 用途
mq01 CentOS 7.3 192.168.217.137 關閉 磁盤節點
mq02 CentOS 7.3 192.168.217.138 關閉 內存節點
mq03 CentOS 7.3 192.168.217.139 關閉 內存節點

RabbitMQ 群集部署 :

1.修改所有主機名(重啟生效):

systemctl stop firewalld.service
setenforce 0

vim /etc/hostname    #其他兩臺相同
mq01.localdomain

vim /etc/hosts        #添加
192.168.217.137 mq01
192.168.217.138 mq02
192.168.217.139 mq03

2.安裝 rabbitmq 服務 :

yum install -y epel-release     #安裝epel源

yum install -y rabbitmq-server  #安裝rabbitmq服務
[root@mq01 ~]# /usr/lib/rabbitmq/bin/rabbitmq-plugins list  #查看插件安裝信息
[ ] amqp_client                       3.3.5
[ ] cowboy                            0.5.0-rmq3.3.5-git4b93c2d
[ ] eldap                             3.3.5-gite309de4
[ ] mochiweb                          2.7.0-rmq3.3.5-git680dba8
......
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management #啟動群集管理服務

3.配置群集功能 :

vim /var/lib/rabbitmq/.erlang.cookie
#把mq01.erlang.cookie內容復制到mq02、mq03 
systemctl restart rabbitmq-server.service   #重啟服務

4.在mq02、mq03上操作,加入mq01群集 :

rabbitmqctl stop_app   #關閉節點

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

rabbitmqctl start_app    #開啟節點

5.驗證集群狀態 :

[root@mq01 ~]# rabbitmqctl cluster_status     #查看狀態
Cluster status of node rabbit@mq01 ...
[{nodes,[{disc,[rabbit@mq01]},{ram,[rabbit@mq03,rabbit@mq02]}]},
 {running_nodes,[rabbit@mq03,rabbit@mq02,rabbit@mq01]},
 {cluster_name,<<"rabbit@mq01">>},
 {partitions,[]}]
#磁盤節點為mq01,內存節點為mq02、mq03.

6.web管理 :

瀏覽器訪問 http://192.168.217.137:15672/ #默認用戶名:guest 密碼:guest

技術分享圖片

千萬PV 網站架構之 RabbitMQ 消息列隊