centos7安裝rabbitmq

RabbitMQ是部署最廣泛的開源消息代理。

RabbitMQ在全球範圍內在小型初創公司和大型企業中進行了超過35,000次RabbitMQ生產部署,是最受歡迎的開源消息代理。

RabbitMQ輕量級,易於在內部和雲中部署。它支持多種消息傳遞協議。RabbitMQ可以部署在分佈式和聯合配置中,以滿足高規模,高可用性要求。

RabbitMQ可在許多操作系統和雲環境中運行,併爲大多數流行語言提供各種開發人員工具。

RabbitMQ是一個在AMQP基礎上完成的,可複用的企業消息系統。它是由Erlang語言開發。

AMQP:Advanced Message Queue,高級消息隊列協議。他是應用層協議的一個開放標準,爲面向消息的中間件設計,基於此協議的客戶端與消息中間件可傳遞消息,並不受產品、開發語言等條件的限制。

RabbitMQ 最初起源於金融系統,用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。具體特點包括:<!--more-->

可靠性(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 提供了許多插件,來從多方面進行擴展,也可以編寫自己的插件。

概念

Broker:消息隊列服務器的實體,是一箇中間件應用,負責接收消息生產者的消息,然後將消息發送至消息接收者或其他的Braker
Exchange:消息交換機,是消息第一個到達的地方,消息通過它指定的路由規則,分發到不同的消息隊列中去。
Queue:消息隊列,消息通過發送和路由之後最終達到的地方,到達Queue的消息即進入邏輯上等待消費的狀態。每個消息都會被髮送到一個或多個隊列。
Binding:綁定,它的作用就是把Exchange和Queue按照路由規則綁定起來,也就是Exchange和Queue之間的虛擬鏈接。
Routing Key:路由關鍵字,Exchange根據這個關鍵字進行消息投遞。
Virtual host:虛擬主機,是對Broker的虛擬劃分,將消費者、生產者和它們依賴的AMQP相關結構進行隔離,一般都是爲了安全考慮。比如:我們可以在一個Broker中設置多個虛擬主機,對不同用戶進行權限的分離。
Connection:連接。代表生產者、消費者、Broker之間進行通信的物理網絡。
Channel:消息通道,用於連接生產者和消費者的邏輯結構。在客戶端每個連接裏,可建立多個Channel,每個Channel代表一個會話任務,通過Channel可以隔離同一個連接中的不同交互內容。
Producer:消息生產者。
Consumer:消息消費者。

消息隊列的使用過程:

  1. 客戶端連接到消息隊列服務器,打開一個channel。
  2. 客戶端聲明一個exchange,並設置相關屬性。
  3. 客戶端聲明一個queue,並設置相關屬性。
  4. 客戶端使用routing key,在exchange和queue之間建立好綁定關係。
  5. 客戶端投遞消息到exchange。

安裝介紹

Erlang安裝配置

前面說到RabbitMQ是由Erlang語言開發,所以需要先安裝Erlang環境

最簡化安裝

配置好 yum倉庫,epel源

yum install erlang

下載好後檢測erlang

[root@lb01 yum.repos.d]# which erl
/usr/bin/erl

RabbitMQ安裝

 最簡化安裝

yum install rabbitmq-server

檢測是否安裝

[root@lb01 yum.repos.d]# rabbitmq
rabbitmqctl       rabbitmq-plugins  rabbitmq-server

RabbitMQ服務命令

#啓動服務
rabbitmq-server -detached 

#查看幫助
man rabbitmq-server
參數解釋:
OPTIONS
       -detached    後臺運行
           Start the server process in the background. Note that this will cause the pid
           not to be written to the pid file.

rabbitmqctl status #查看rabbitmq狀態

#創建rabbitmq登錄用戶
添加用戶
rabbitmqctl add_user [username] [password]
添加權限
rabbitmqctl set_permissions -p "/" [username] ".*" ".*" ".*"
修改用戶角色
rabbitmqctl set_user_tags [username] administrator
 

配置rabbitmq網頁插件

RabbitMQ網頁管理的端口是15672,但是現在還不能訪問,需要添加網頁插件才能訪問

rabbitmq-plugins enable rabbitmq_management

啓動Rabbitmq服務

rabbitmq-server -detached

啓動之後檢查rabbitmq端口狀態

[root@web01  /etc/yum.repos.d]$netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1217/master
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      12930/beam.smp
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN      10851/epmd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      953/sshd
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      12930/beam.smp #rabbitmq web界面端口
tcp6       0      0 ::1:25                  :::*                    LISTEN      1217/master
tcp6       0      0 :::5672                 :::*                    LISTEN      12930/beam.smp  
tcp6       0      0 :::3306                 :::*                    LISTEN      1039/mysqld
tcp6       0      0 :::4369                 :::*                    LISTEN      10851/epmd
tcp6       0      0 :::22                   :::*                    LISTEN      953/sshd
udp        0      0 127.0.0.1:323           0.0.0.0:*                           695/chronyd
udp6       0      0 ::1:323                 :::*                                695/chronyd

rabbitmq啓動端口號解析

4369 (epmd), 25672 (Erlang distribution)

Epmd 是 Erlang Port Mapper Daemon 的縮寫,在 Erlang 集羣中相當於 dns 的作用,綁定在4369端口上。

5672, 5671 (AMQP 0-9-1 without and with TLS)

AMQP 是 Advanced Message Queuing Protocol 的縮寫,一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,專爲面向消息的中間件設計。
基於此協議的客戶端與消息中間件之間可以傳遞消息,並不受客戶端/中間件不同產品、不同的開發語言等條件的限制。Erlang 中的實現有 RabbitMQ 等。

15672 (if management plugin is enabled)

通過 http://serverip:15672 訪問 RabbitMQ 的 Web 管理界面,默認用戶名密碼都是 guest。(注意:RabbitMQ 3.0之前的版本默認端口是55672,下同)

61613, 61614 (if STOMP is enabled)

Stomp 是一個簡單的消息文本協議,它的設計核心理念就是簡單與可用性,官方文檔,實踐一下 Stomp 協議需要:

一個支持 stomp 消息協議的 messaging server (譬如activemq,rabbitmq);
一個終端(譬如linux shell);
一些基本命令與操作(譬如nc,telnet)
1883, 8883 (if MQTT is enabled)
MQTT 只是 IBM 推出的一個消息協議,基於 TCP/IP 的。兩個 App 端發送和接收消息需要中間人,這個中間人就是消息服務器(比如ActiveMQ/RabbitMQ),三者通信協議就是 MQTT

創建root用戶用於登錄

[root@web01  /etc/yum.repos.d]$rabbitmqctl add_user root redhat
Creating user "root" ...
...done.

修改root用戶角色權限

第二、添加root用戶爲administrator角色
[root@web01 /etc/yum.repos.d]$rabbitmqctl set_user_tags root administrator
Setting tags for user "root" to [administrator] ...
...done.

設置root用戶權限,允許訪問的vhost以及配置、寫、讀的權限

[root@web01  /etc/yum.repos.d]$rabbitmqctl set_permissions -p "/" root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "/" ...
...done.

檢查vhost /  允許哪些用戶訪問

[root@web01  /etc/yum.repos.d]$rabbitmqctl list_permissions -p /
Listing permissions in vhost "/" ...
guest    .*    .*    .*
root    .*    .*    .*
...done.

登錄rabbitmq web界面

Python操作RabbitMQ

import pika
#創建用戶憑證,確認賬號密碼
credentials = pika.PlainCredentials('root', 'redhat')
#創建連接
connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.119.11', port=5672, virtual_host='/', credentials=credentials))
#創建頻道連接
channel = connection.channel()
#打印頻道信息,是否創建ok
print(channel)
#通過此頻道可以創建隊列

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