千萬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代表一個會話任務。

主機名IP用途rabbitmq01192.168.200.128磁盤節點rabbitmq02192.168.200.129內存節點rabbitmq03192.168.200.130內存節點

  • 安裝RabbitMQ
  • 1:需要配置三個節點的hosts文件,將如下的內容分別加入到三臺服務器上。
vim /etc/hostname //其他兩臺為rabbitmq02、rabbitmq03
rabbitmq01.localdomain
# vim /etc/hosts //添加下面三行
192.168.200.128 rabbitmq01
192.168.200.129 rabbitmq02
192.168.200.130 rabbitmq03
# init 6 //重啟
# service firewalld stop

# setenforce 0
  • 2:安裝rabbitmq軟件。
# yum install epel-release -y //安裝epel源
# yum install -y rabbitmq-server //安裝軟件
# rabbitmq-plugins list //查看插件安裝情況
# rabbitmq-plugins enable rabbitmq_management //啟用rabbitmq_management服務
# systemctl start rabbitmq-server.service //啟動rabbitmq服務
# netstat -ntap | grep 5672 //如圖3個端口開啟 說明正常
# rabbitmqctl cluster_status //檢查三臺的集群狀態,目前相互獨立,沒有形成集群。

千萬PV網站架構中RabbitMQ安裝、集群


千萬PV網站架構中RabbitMQ安裝、集群

千萬PV網站架構中RabbitMQ安裝、集群

  • 構建Erlang群集
# systemctl stop rabbitmq-server.service //停止三臺服務器
# vi /var/lib/rabbitmq/.erlang.cookie //三臺值配置成一樣的,複製rabbitmq01的內容到其他兩臺
# systemctl start rabbitmq-server.service
  • 在02、 03節點上操作
# rabbitmqctl stop_app
# rabbitmqctl join_cluster --ram rabbit@mq01 //加入到磁盤節點
# rabbitmqctl start_app
千萬PV網站架構中RabbitMQ安裝、集群

  • 打開瀏覽器進入web頁面管理
  • 輸入:http://192.168.200.128:15672/
  • 默認用戶名:guest 密碼:guest
千萬PV網站架構中RabbitMQ安裝、集群

  • 創建策略
  • Name:策略名稱
  • Pattern:匹配的規則 (這是表示匹配以a開頭,^ 匹配所有隊列)
  • Definition;使用ha-mode模式中的all,也就是同步所有匹配的隊列。
  • Priority:優先級,默認是0,值越大優先級越大。
千萬PV網站架構中RabbitMQ安裝、集群


  • 添加隊列
  • Name:隊列名稱
  • Durability:隊列是否持久化(durable 是支持)
  • Auto delete:自動刪除
  • Arguments:使用的策略類型
千萬PV網站架構中RabbitMQ安裝、集群

  • 在創建一個aaa 不填寫Arguments值
  • 查看隊列消息
千萬PV網站架構中RabbitMQ安裝、集群


  • 添加隊列消息
  • 2-Persistent:表示持久化,反之上面顯示非持久化。
  • Headers: 隨便填寫
  • Properties:點擊問號,現在一個ID號
  • Payload:消息內容
千萬PV網站架構中RabbitMQ安裝、集群

 

  • 將rabbitmq01 節點關了 在rabbitmq02和rabbitmq03查看消息記錄是否還存在。
  • 輸入:http://192.168.200.129:15672/
千萬PV網站架構中RabbitMQ安裝、集群


 

  • 將rabbitmq02 節點也關了 在rabbitmq03查看消息記錄是否還存在。
  • 輸入:http://192.168.200.130:15672/
千萬PV網站架構中RabbitMQ安裝、集群

  • 現在把剛剛的節點都開啟
# rabbitmqctl sync_queue aa //01或者02上執行同步命令
# systemctl restart rabbitmq-server.service //重啟3個節點的服務
千萬PV網站架構中RabbitMQ安裝、集群

  • 查看隊列在服務器的位置
# ll -a /var/lib/rabbitmq/mnesia/rabbit@rabbitmq01/queues/

千萬PV網站架構中RabbitMQ安裝、集群


  • 總結
  • 一個目錄對應的就是一個隊列,裡面就是該隊列本身的消息。注意如果內存節點故障,隊列就會丟失;如果是磁盤節點故障,隊列還會存在。但如果創建隊列是指定了 x-ha-prolicy參數,待修復磁盤節點故障後,在啟動磁盤節點的rabbitmq服務,未消費的隊列消息及消息會不存在,需要手動執行同步隊列命令。

對Java微服務、分佈式、高併發、高可用、大型互聯網架構技術、面試經驗交流感興趣的。可以關注我的頭條號,我會在微頭條不定期的發放免費的資料鏈接,這些資料都是從各個技術網站蒐集、整理出來的,如果你有好的學習資料可以私聊發我,我會註明出處之後分享給大家。歡迎分享,歡迎評論,歡迎轉發!


分享到:


相關文章: