1. 程式人生 > >Rabbitmq集群詳解

Rabbitmq集群詳解

ann -o src consumer c2c 屬性。 gin 易用 組成

Rabbitmq簡介

1、什麽是rabbitmq?

MQ全稱為MessageQueue,消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過寫和檢索出入列隊的針對應用程序的數據(消息)來通信,而無需專用連接來鏈接它們。
RabbitMQ 是一個由 Erlang 語言開發的 AMQP(高級消息隊列協議) 的開源實現。RabbitMQ 屬於消息中間件,主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。

2、rabbitmq特點

  • 可靠性(Reliability)
    RabbitMQ 使用一些機制來保證可靠性,如持久化、傳輸確認、發布確認。
  • 靈活的路由(Flexible Routing)
    在消息進入隊列之前,通過 Exchange 來路由消息的。
  • 消息集群(Clustering)
    多個 RabbitMQ 服務器可以組成一個集群,形成一個邏輯 Broker 。
  • 高可用(Highly Available Queues)
    隊列可以在集群中的機器上進行鏡像,使得在部分節點出問題的情況下隊列仍然可用。
  • 多種協議(Multi-protocol)
    RabbitMQ 支持多種消息隊列協議,比如 STOMP、MQTT 等等。
  • 多語言客戶端(Many Clients)
    RabbitMQ 幾乎支持所有常用語言,比如 Java、.NET、Ruby 等等。
  • 管理界面(Management UI)
    RabbitMQ 提供了一個易用的用戶界面,使得用戶可以監控和管理消息 Broker 的許多方面。
  • 跟蹤機制(Tracing)
    如果消息異常,RabbitMQ 提供了消息跟蹤機制,使用者可以找出發生了什麽。
  • 插件機制(Plugin System)
    RabbitMQ 提供了許多插件,來從多方面進行擴展,也可以編寫自己的插件。

    3、rabbitmq的內部結構

    技術分享圖片

  • Message
    消息,消息是不具名的,它由消息頭和消息體組成。
  • Publisher
    消息的生產者,也是一個向交換器發布消息的客戶端應用程序。
  • Exchange
    交換器,用來接收生產者發送的消息並將這些消息路由給服務器中的隊列。
  • Binding
    綁定,用於消息隊列和交換器之間的關聯。
  • Queue
    消息隊列,用來保存消息直到發送給消費者。它是消息的容器,也是消息的終點。一個消息可投入一個或多個隊列。
  • Connection
    網絡連接,比如一個TCP連接。
  • Channel
    信道,多路復用連接中的一條獨立的雙向數據流通道。
  • Consumer
    消息的消費者,表示一個從消息隊列中取得消息的客戶端應用程序。
  • Virtual Host
    虛擬主機,表示一批交換器、消息隊列和相關對象。虛擬主機是共享相同的身份認證和加密環境的獨立服務器域。
  • Broker
    表示消息隊列服務器實體。

    Rabbitmq應用

    rabbit應用模式

    單一模式
    普通模式(默認集群模式)
    鏡像模式(隊列做成鏡像隊列,存在多個節點)
    Rabbitmq的集群節點包括內存節點、磁盤節點,支持消息持久化、也就是數據寫在磁盤上。

rabbit工作過程

技術分享圖片

(1)客戶端連接到消息隊列服務器,打開一個channel。
(2)客戶端聲明一個exchange,並設置相關屬性。
(3)客戶端聲明一個queue,並設置相關屬性。
(4)客戶端使用routing key,在exchange和queue之間建立好綁定關系。
(5)客戶端投遞消息到exchange。
(6)Exchange接收到消息根據消息的key和已經設置的binding,進行消息路由,將消息投遞到queues中,應用程序雙方就實現了通信。

Rabbitmq部署

實驗說明:

一個集群中有三臺服務器,其中一臺使用磁盤模式,另外兩臺是內存模式。客戶端通過前端反向代理去連接兩臺內存模式服務器。註意將三臺服務器都連上互聯網並安裝軟件包。

實驗環境:

主機名 操作系統 IP地址 用途
mq01 CentOS7 192.168.37.128 磁盤節點
mq02 CentOS7 192.168.37.130 內存節點
mq03 CentOS7 192.168.37.131 內存節點

實驗過程:

++++++三臺服務器相同操作++++++
1、關閉防火墻、安全功能

systemctl stop firewalld.service
setenforce 0

2、首先修改三臺服務器的主機名和hosts文件

hostnamectl set-hostname mq01
bash

vim /etc/hosts
192.168.37.128 mq01
192.168.37.130 mq02
192.168.37.131 mq03

技術分享圖片
技術分享圖片
技術分享圖片
3、yum安裝軟件包

yum install -y epel-release #epel為擴展軟件包
yum install -y rabbitmq-server #rabbitmq軟件包

4、建立軟連接

ln -s /usr/lib/rabbitmq/bin/* /usr/bin/

5、查看插件安裝情況

rabbitmq-plugins list

技術分享圖片
6、開啟管理服務

rabbitmq-plugins enable rabbitmq_management

技術分享圖片

7、開啟rabbitmq服務

systemctl start rabbitmq-server.service
netstat -ntap |grep 5672

技術分享圖片
8、查看各自的群集狀態

rabbitmqctl cluster_status

mq01
技術分享圖片
mq02
技術分享圖片
mq03
技術分享圖片
9、關閉服務,復制配置文件後開啟

systemctl stop rabbitmq-server.service
//隱藏文件,三臺配置一樣,將磁盤節點上的文件內容復制到其他2臺
vim /var/lib/rabbitmq/.erlang.cookie
systemctl start rabbitmq-server.service

技術分享圖片
++++++以下操作在內存節點上++++++
1、將mq02、mq03內存節點服務器分別加入到磁盤節點

rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@mq01 #加入到磁盤節點
#ram:以內存節點形式添加,不加磁盤形式
rabbitmqctl cluster_status #驗證集群狀態

mq02
技術分享圖片
mq03
技術分享圖片
2、查看mq01磁盤節點服務器的集群狀態

rabbitmqctl cluster_status

技術分享圖片
++++++rabbit圖形化操作++++++
1、登錄磁盤節點服務器

http://192.168.37.128:15672/ 默認用戶:guest 密碼:guest

技術分享圖片
2、在磁盤節點服務器上創建策略

name: my_ha
pattern: ^a
Apply to : Exchange and queues
definition: ha-mode all

技術分享圖片
3、查看策略(三臺服務器同步)
mq01
技術分享圖片
mq02
技術分享圖片
mq03
技術分享圖片
4、在磁盤節點服務器上增加消息隊列
Name: aa
Durabiliy: Durable
Node: rabbit@mq01
Auto delete: No
技術分享圖片
5、在新建隊列中寫入消息
mode: 2-persistent
headers: a = 123
properties: id=1
payload: hello,world!
技術分享圖片
6、查看隊列消息
技術分享圖片

Rabbitmq集群詳解