什麼是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 | 內存節點 |
vim /etc/hosts
172.16.10.138 RabbitMQ01 172.16.10.147 RabbitMQ02 172.16.10.146 RabbitMQ03
mq01.localdomain #依次爲mq02 mq03
yum -y install epel-release
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
rabbitmqctl stop_app rabbitmqctl join_cluster --ram rabbit@mq01 #加入到磁盤節點 rabbitmqctl start_app rabbitmqctl cluster_status #驗證集羣狀態