RabbitMQ介紹node
MQ全稱爲Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通訊方法。應用程序經過讀寫出入隊列的消息(針對應用程序的數據)來通訊,而無需專用鏈接來連接它們。消息傳遞指的是程序之間經過在消息中發送數據進行通訊,而不是經過直接調用彼此來通訊,直接調用一般是用於諸如遠程過程調用的技術。排隊指的是應用程序經過 隊列來通訊。隊列的使用除去了接收和發送應用程序同時執行的要求。vim
RabbitMQ是流行的開源消息隊列系統,用erlang語言開發。RabbitMQ是AMQP(高級消息隊列協議)的標準實現。服務器
RabbitMQ原理圖示cookie
Exchange四種匹配模式app
fanout:將生產者發送的信息推送到全部與他綁定的Queue;dom
direct:精準匹配,當routing key=binding key時,將信息發送到對應的Queue;ide
topic:模糊匹配,當知足部分規則時,將信息發送到對應的Queue;spa
headers:不依賴routing key,binding key匹配規則,依據消息內容headers屬性匹配。插件
關鍵概念介紹3d
Broker:簡單來講就是消息隊列服務器實體。
Exchange:消息交換機,它指定消息按什麼規則,路由到哪一個隊列。
Queue:消息隊列載體,每一個消息都會被投入到一個或多個隊列。
Binding:綁定,它的做用就是把exchange和queue按照路由規則綁定起來。
Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。
vhost:虛擬主機,一個broker裏能夠開設多個vhost,用做不一樣用戶的權限分離。
producer:消息生產者,就是投遞消息的程序。
consumer:消息消費者,就是接受消息的程序。
channel:消息通道,在客戶端的每一個鏈接裏,可創建多個channel,每一個channel表明一個會話任務。
消息隊列的使用過程大概以下:
(1)客戶端鏈接到消息隊列服務器,打開一個channel。
(2)客戶端聲明一個exchange,並設置相關屬性。
(3)客戶端聲明一個queue,並設置相關屬性。
(4)客戶端使用routing key,在exchange和queue之間創建好綁定關係。
(5)客戶端投遞消息到exchange。
RabbitMQ實驗搭建
配置信息:
配置步驟:
1、更改主機名(防止啓動服務時出現故障):
mq01/mq02/mq03:
vim /etc/hostname
mq01.localdomain
vim /etc/hosts
192.168.218.156 mq01
192.168.218.145 mq02
192.168.218.139 mq03
2、構建獨立的服務器
mq01/mq02/mq03:
systemctl stop firewalld.service
setenforce 0
yum install epel-release -y
yum install rabbitmq-server -y
ln -s /usr/lib/rabbitmq/bin/* /usr/bin/
rabbitmq-plugins list //查看插件安裝狀況
rabbitmq-plugins enable rabbitmq_management //啓用rabbitmq_management管理
systemctl start rabbitmq-server.service //開啓服務
rabbitmqctl cluster_status //檢查集羣狀態(主機名未解析會報error)
Cluster status of node rabbit@mq01 ...
[{nodes,[{disc,[rabbit@mq01]}]},
{running_nodes,[rabbit@mq01]},
{cluster_name,<<"rabbit@mq01">>},
{partitions,[]}]
...done.
3、構建RabbitMQ羣集
mq01/mq02/mq03:
systemctl stop rabbitmq-server.service
[root@mq01 ~]# cat /var/lib/rabbitmq/.erlang.cookie
FDFUVYLHUIERZZNQUKPM //同步三臺cookie相同
systemctl start rabbitmq-server.service
內存節點 mq02/03
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@mq01 //之內存節點形式存在
rabbitmqctl start_app
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,[]}]
...done.
http://192.168.218.156:15672/ //登陸磁盤節點服務器 //默認用戶名:guest 密碼:guest