千萬PV中RabbitMQ部署及原理詳解

RabbitMQ介紹

    MQ全稱爲Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用於諸如遠程過程調用的技術。排隊指的是應用程序通過 隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。

    RabbitMQ是流行的開源消息隊列系統,用erlang語言開發。RabbitMQ是AMQP(高級消息隊列協議)的標準實現。

RabbitMQ原理圖示

image

Exchange四種匹配模式

  1. fanout:將生產者發送的信息推送到所有與他綁定的Queue;

  2. direct:精準匹配,當routing key=binding key時,將信息發送到對應的Queue;

  3. topic:模糊匹配,當滿足部分規則時,將信息發送到對應的Queue;

  4. headers:不依賴routing key,binding key匹配規則,依據消息內容headers屬性匹配。

關鍵概念介紹

  • 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實驗搭建

配置信息:

圖片.png

配置步驟:

一、更改主機名(防止啓動服務時出現故障):

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

二、構建獨立的服務器

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.

三、構建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

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章