MQ全稱爲MessageQueue,消息隊列(MQ)是一種應用程序對應用程序的通訊方法。應用程序經過寫和檢索出入列隊的針對應用程序的數據(消息)來通訊,而無需專用鏈接來連接它們。
RabbitMQ 是一個由 Erlang 語言開發的 AMQP(高級消息隊列協議) 的開源實現。RabbitMQ 屬於消息中間件,主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。前端
單一模式
普通模式(默認集羣模式)
鏡像模式(隊列作成鏡像隊列,存在多個節點)
Rabbitmq的集羣節點包括內存節點、磁盤節點,支持消息持久化、也就是數據寫在磁盤上。vim
(1)客戶端鏈接到消息隊列服務器,打開一個channel。
(2)客戶端聲明一個exchange,並設置相關屬性。
(3)客戶端聲明一個queue,並設置相關屬性。
(4)客戶端使用routing key,在exchange和queue之間創建好綁定關係。
(5)客戶端投遞消息到exchange。
(6)Exchange接收到消息根據消息的key和已經設置的binding,進行消息路由,將消息投遞到queues中,應用程序雙方就實現了通訊。安全
一個集羣中有三臺服務器,其中一臺使用磁盤模式,另外兩臺是內存模式。客戶端經過前端反向代理去鏈接兩臺內存模式服務器。注意將三臺服務器都連上互聯網並安裝軟件包。bash
主機名 | 操做系統 | IP地址 | 用途 |
---|---|---|---|
mq01 | CentOS7 | 192.168.37.128 | 磁盤節點 |
mq02 | CentOS7 | 192.168.37.130 | 內存節點 |
mq03 | CentOS7 | 192.168.37.131 | 內存節點 |
++++++三臺服務器相同操做++++++
一、關閉防火牆、安全功能服務器
systemctl stop firewalld.service
setenforce 0cookie
二、首先修改三臺服務器的主機名和hosts文件網絡
hostnamectl set-hostname mq01 bash vim /etc/hosts 192.168.37.128 mq01 192.168.37.130 mq02 192.168.37.131 mq03
三、yum安裝軟件包app
yum install -y epel-release #epel爲擴展軟件包
yum install -y rabbitmq-server #rabbitmq軟件包ide
四、創建軟鏈接加密
ln -s /usr/lib/rabbitmq/bin/* /usr/bin/
五、查看插件安裝狀況
rabbitmq-plugins list
六、開啓管理服務
rabbitmq-plugins enable rabbitmq_management
七、開啓rabbitmq服務
systemctl start rabbitmq-server.service
netstat -ntap |grep 5672
八、查看各自的羣集狀態
rabbitmqctl cluster_status
mq01
mq02
mq03
九、關閉服務,複製配置文件後開啓
systemctl stop rabbitmq-server.service
//隱藏文件,三臺配置同樣,將磁盤節點上的文件內容複製到其餘2臺
vim /var/lib/rabbitmq/.erlang.cookie
systemctl start rabbitmq-server.service
++++++如下操做在內存節點上++++++
一、將mq0二、mq03內存節點服務器分別加入到磁盤節點
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@mq01 #加入到磁盤節點
#ram:之內存節點形式添加,不加磁盤形式
rabbitmqctl cluster_status #驗證集羣狀態
mq02
mq03
二、查看mq01磁盤節點服務器的集羣狀態
rabbitmqctl cluster_status
++++++rabbit圖形化操做++++++
一、登陸磁盤節點服務器
http://192.168.37.128:15672/ 默認用戶:guest 密碼:guest
二、在磁盤節點服務器上建立策略
name: my_ha
pattern: ^a
Apply to : Exchange and queues
definition: ha-mode all
三、查看策略(三臺服務器同步)
mq01
mq02
mq03
四、在磁盤節點服務器上增長消息隊列
Name: aa
Durabiliy: Durable
Node: rabbit@mq01
Auto delete: No
五、在新建隊列中寫入消息
mode: 2-persistent
headers: a = 123
properties: id=1
payload: hello,world!
六、查看隊列消息