什麼是RabbitMQ
RabbitMQ是由Erlang語言編寫的實現了高級消息隊列協議(AMQP)的開源消息代理軟件(也可稱爲 面向消息的中間件)。支持Windows、Linux/Unix、MAC OS X操作系統和包括JAVA在內的多種編程語言。
AMQP,即Advanced Message Queuing Protocol,一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不同產品,不同的開發語言等條件的限制。
官方文檔地址:
rabbitMQ的java驅動官方文檔地址
版本5.3.0:https://rabbitmq.github.io/rabbitmq-java-client/api/current/overview-summary.html
版本4.7.0:https://rabbitmq.github.io/rabbitmq-java-client/api/4.x.x/overview-summary.html
spring AMQP 官方文檔地址
版本1.7.3:https://docs.spring.io/spring-amqp/docs/1.7.3.BUILD-SNAPSHOT/api/
使用場景(解決了什麼問題)
名稱 | 簡單說明 |
---|---|
異步處理 | 應用之間的異步處理問題 |
應用解耦 | 應用之間的解耦問題 |
流量削峯 | 對應用的流量進行削峯,如秒殺場景 |
日誌處理 | 應用之間的日誌收集,假設程序裏面每個類,每個方法都要定義日誌記錄,單單說效率就不好 |
Rabblit官網地址
Rabblit官網地址:http://www.rabbitmq.com/
Erlang下載環境(網頁往下拖有Erlang的官方安裝方式,此方式不需要下載)
地址:https://www.erlang-solutions.com/resources/download.html
第一步安裝Erlang使用存儲庫安裝
1.添加存儲庫條目
要將Erlang Solutions存儲庫(包括用於驗證已簽名軟件包的公共密鑰)添加到您的系統,請調用以下命令:
wget https://packages.erlang-solutions.com/erlang-solutions-2.0-1.noarch.rpm
rpm -Uvh erlang-solutions-2.0-1.noarch.rpm
或者:手動添加存儲庫條目
RPM軟件包已簽名。要添加Erlang Solutions鍵,請執行以下命令:
rpm --import https://packages.erlang-solutions.com/rpm/erlang_solutions.asc
將以下行添加到"/etc/yum.repos.d/"中的erlang_solutions.repo文件中:
[erlang-solutions]
name=CentOS $releasever - $basearch - Erlang Solutions
baseurl=https://packages.erlang-solutions.com/rpm/centos/$releasever/$basearch
gpgcheck=1
gpgkey=https://packages.erlang-solutions.com/rpm/erlang_solutions.asc
enabled=1
2.添加具有依賴性的存儲庫
軟件包需要一些標準存儲庫中不存在的軟件包。請確保已啓用EPEL存儲庫。
3.安裝Erlang
調用以下命令來安裝“ erlang”軟件包:
sudo yum install erlang
安裝成功後圖片:
驗證輸入erl即可進入Erlang
第二步,手動安裝RabbitMQ
在使用Yum存儲庫之前,必須先導入RabbitMQ簽名密鑰。這使RPM工具信任存儲庫中提供的軟件包上的簽名。爲此,以超級用戶身份運行rpm --import:
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
爲了使用Yum存儲庫,必須在/etc/yum.repos.d/目錄下添加一個.repo文件(例如,rebbitmq.repo)。在不同發行版之間,文件的內容將略有不同(例如,CentOS 7和8與CentOS 6與OpenSUSE)。
以下示例
在CentOS 7上將安裝RabbitMQ 3.8的存儲庫:
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/8/
gpgcheck=0
repo_gpgcheck=0
enabled=1
在CentOS 7上:
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
與CentOS 6相同:
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/6/
gpgcheck=0
repo_gpgcheck=0
enabled=1
以下示例針對OpenSUSE:
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/opensuse/42.1/
gpgcheck=0
repo_gpgcheck=0
enabled=1
以下示例針對SLES 11.x:
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/sles/11
gpgcheck=0
repo_gpgcheck=0
enabled=1
以下示例設置了一個存儲庫,該存儲庫將在CentOS 7上安裝RabbitMQ 3.7。請注意,RabbitMQ 3.7 在2020年將不再受支持。
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
具有rpm和已下載的RPM
下載服務器軟件包後,以“ root”身份發出以下命令:
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
#此示例假定軟件包的CentOS 8版本。
#對於CentOS 7,將“ el8”替換爲“ el7”。
yum install rabbitmq-server-3.8.1-1.el8.noarch.rpm
RabbitMQ公共簽名密鑰也可以從rabbitmq.com下載:
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
#此示例假定軟件包的CentOS 8版本。
#對於CentOS 7,將“ el8”替換爲“ el7”。
yum install rabbitmq-server-3.8.1-1.el8.noarch.rpm
下載服務器
在某些情況下,下載軟件包並手動安裝可能會更容易。該軟件包可以從GitHub下載。
描述 | 下載 | 簽名 |
---|---|---|
適用於RHEL Linux 8.x,CentOS 8.x,Fedora 28+的RPM(支持systemd) | rabbitmq-server-3.8.1-1.el8.noarch.rpm | 簽名 |
適用於RHEL Linux 7.x,CentOS 7.x,Fedora 24+的RPM(支持systemd) | rabbitmq-server-3.8.1-1.el7.noarch.rpm | 簽名 |
RHEL Linux 6.x,CentOS 6.x,Fedora之前的RPM 19 | rabbitmq-server-3.8.1-1.el6.noarch.rpm | 簽名 |
適用於openSUSE Linux的RPM | rabbitmq-server-3.8.1-1.suse.noarch.rpm | 簽名 |
SLES 11.x的RPM | rabbitmq-server-3.8.1-1.sles11.noarch.rpm | 簽名 |
運行RabbitMQ服務器
啓動服務器
安裝RabbitMQ服務器軟件包時,默認情況下未將服務器作爲守護程序啓動。在系統引導時默認啓動守護程序,以管理員身份運行
chkconfig rabbitmq-server on
作爲管理員,像往常一樣啓動和停止服務器:
/sbin/service rabbitmq-server start
/sbin/service rabbitmq-server stop
安裝完畢,查看RabbMQ狀態:service rabbitmq-server status
設置開啓啓動:sudo chkconfig rabbitmq-server on
開啓WEB管理頁面:sudo rabbitmq-plugins enable rabbitmq_management
默認WEB管理的登錄帳號和密碼統一爲:guest
默認RabbitMQ擁有如下端口號:
端口號 | 簡單說明 |
15672 | HTTP API客戶端,管理UI和Rabbitmqadmin (僅在啓用了管理插件的情況下) |
5672,5671 | 由不帶TLS和帶TLS的AMQP 0-9-1和1.0客戶端使用 |
4369 | epmd,RabbitMQ節點和CLI工具使用的對等發現服務 |
25672 | 用於節點間和CLI工具通信(Erlang分發服務器端口),並從動態範圍分配(默認情況下限制爲單個端口,計算爲AMQP端口+ 20000)。除非確實需要這些端口上的外部連接(例如,羣集使用聯合身份驗證或在子網外部的計算機上使用CLI工具),否則這些端口不應公開。有關詳細信息,請參見網絡指南。 |
35672-35682 | 由CLI工具(Erlang分發客戶端端口)用於與節點進行通信,並從動態範圍(計算爲服務器分發端口+ 10000通過服務器分發端口+ 10010)分配。有關詳細信息,請參見網絡指南。 |
61613, 61614 | 不帶TLS和帶TLS的STOMP客戶端(僅在啓用STOMP插件的情況下) |
1883, 8883 | (如果啓用了MQTT插件,則不帶TLS和具有TLS的MQTT客戶端 |
15674 | STOMP-over-WebSockets客戶端(僅在啓用了Web STOMP插件的情況下) |
15675 | MQTT-over-WebSockets客戶端(僅在啓用Web MQTT插件的情況下) |
15692 | Prometheus指標(僅在啓用Prometheus插件的情況下) |
可以將RabbitMQ配置 爲使用不同的端口和特定的網絡接口。
一般常用就15672和5672防火牆進行放出端口。
在Linux上控制系統限制
運行生產工作負載的RabbitMQ安裝可能需要系統限制和內核參數調整,才能處理相當數量的併發連接和隊列。需要調整的主要設置是打開文件的最大數量,也稱爲ulimit -n。對於消息傳遞代理,許多操作系統上的默認值都太低(在幾個Linux發行版中爲1024)。我們建議在生產環境中爲用戶Rabbitmq至少允許65536個文件描述符。4096應該足以應付許多開發工作負載。
有兩個限制:操作系統內核允許的最大打開文件數(fs.file-max)和每個用戶的限制(ulimit -n)。前者必須高於後者。
外部訪問192.168.153.128:15672/#/users,如下圖:
但是此時是登錄不了的,默認guest只能localhost訪問
但是我們並不直接使用guest,我們新建一個新的用戶來操作登錄
添加RabbitMQ用戶:sudo rabbitmqctl add_user root 123456
帳號:root 密碼:123456
賦予RabbitMQ用戶角色:sudo rabbitmqctl set_user_tags root administrator
賦予用戶默認vhost的全部操作權限:sudo rabbitmqctl set_permissions -p / root "." "." ".*"
查看用戶的權限:sudo rabbitmqctl list_user_permissions username
查看全部用戶:sudo rabbitmqctl list_users
此操作刪除guest用戶,我們自己創建新的用戶來使用
刪除用戶:sudo rabbitmqctl delete_user guest
最後一步,操作完畢,要記得重啓,記得重啓,記得重啓。三遍
service rabbitmq-server restart
重啓後我們再訪問:http://192.168.153.128:15672/#/users進行登錄
至此,安裝結束。。。。
日誌文件和管理
服務器日誌位於可配置目錄下,當通過Linux軟件包管理器安裝RabbitMQ時,該目錄通常默認爲/var/log/rabbitmq。
RABBITMQ_LOG_BASE可用於覆蓋日誌目錄位置。
本文參考:
https://www.rabbitmq.com/install-rpm.html#install-erlang
https://www.erlang-solutions.com/resources/download.html