RabbitMQ 基礎(chǔ)核心配置文件介紹
1. 前言
Hello,大家好。今天會為同學(xué)們介紹 RabbitMQ 中的基礎(chǔ)核心配置文件。這些基礎(chǔ)核心配置文件是保證我們的 RabbitMQ 服務(wù)正常運行的基礎(chǔ),如果我們沒有根據(jù)實際情況去配置這些文件,那么我們的 RabbitMQ 服務(wù)可能就不會按照我們計劃的那樣去運行,也就不能達到我們預(yù)期的結(jié)果。
理解并掌握 RabbitMQ 基礎(chǔ)核心配置文件的配置方法,以及基礎(chǔ)核心配置屬性,是靈活配置和應(yīng)用 RabbitMQ 服務(wù)的前提,我們只有掌握了 RabbitMQ 的配置手段之后,我們才能在不同場景去應(yīng)用 RabbitMQ 。
本節(jié)主要內(nèi)容:
-
RabbitMQ 環(huán)境相關(guān)配置文件及參數(shù);
-
RabbitMQ 基礎(chǔ)配置文件及參數(shù);
-
RabbitMQ 額外配置文件及參數(shù)。
2. RabbitMQ 環(huán)境相關(guān)配置文件及參數(shù)
2.1 文件定義與路徑
RabbitMQ 的環(huán)境配置文件,主要是用來對 RabbitMQ 服務(wù)所運行的環(huán)境進行配置,該配置文件根據(jù)所處的平臺設(shè)置了不同的文件名稱,在 Windows 平臺中,該配置文件被稱為 rabbitmq-env-conf.bat ,在 Centos 平臺中,該配置文件被稱為 rabbitmq-env.conf 。
如果同學(xué)們在安裝 RabbitMQ 服務(wù)時,均采用了默認安裝的方式,那么在 Windows 平臺中,rabbitmq-env-conf.bat 配置文件的所在目錄就位于 RabbitMQ 服務(wù)的安裝目錄下的 sbin 目錄中;在 Centos 平臺中,rabbitmq-env.conf 配置文件的所在目錄就位于 /usr/lib/rabbitmq/bin 目錄下。 如果大家在安裝 RabbitMQ 服務(wù)時,采用了自定義安裝的方式,那么請到各自對應(yīng)的目錄下去尋找該配置文件。
Tips: 本著簡潔明了的原則,本節(jié)所介紹的 RabbitMQ 配置文件均以 Centos 平臺下的為例,這和 Windows 平臺大同小異,并沒有其他的特殊之處。
2.2 核心配置屬性介紹
RABBITMQ_NODE_IP_ADDRESS 屬性
RABBITMQ_NODE_IP_ADDRESS 屬性是用來描述可訪問 RabbitMQ 服務(wù)的主機地址,具體到我們的工作當中,就是允許哪些應(yīng)用程序訪問我們的 RabbitMQ 服務(wù)。
該屬性默認值為空字符串,表示任何應(yīng)用程序都可以訪問我們的 RabbitMQ 服務(wù)。那么,如果我們只允許一個應(yīng)用程序來訪問我們的 RabbitMQ 服務(wù),我們應(yīng)該怎么來配置呢?如下代碼所示:
// 假定我們的應(yīng)用程序所在地址為 192.165.22.123
RABBITMQ_NODE_IP_ADDRESS="192.165.22.123"
通過上述代碼,我們可以知道,如果我們想指定應(yīng)用程序訪問我們的 RabbitMQ 服務(wù),那么我們只需要將我們應(yīng)用程序所在地址作為字符串的形式,來發(fā)賦給 RABBITMQ_NODE_IP_ADDRESS 屬性即可。
RABBITMQ_NODE_PORT 屬性
RABBITMQ_NODE_PORT 屬性是用來描述 RabbitMQ 服務(wù)所使用的網(wǎng)絡(luò)端口,即 RabbitMQ 服務(wù)在服務(wù)器上所綁定的服務(wù)端口。
該屬性默認值為 5672 ,即 RabbitMQ 服務(wù)默認使用 5672 端口。如果我們想改變 RabbitMQ 服務(wù)所綁定的端口,我們只需要按照上述屬性的設(shè)置步驟即可,如下代碼所示:
// 假定我們需要將 RabbitMQ 的服務(wù)綁定到 6672 端口上
RABBITMQ_NODE_PORT="6672"
RABBITMQ_NODENAME 屬性
RABBITMQ_NODENAME 屬性是用來描述 RabbitMQ 服務(wù)當前所在節(jié)點的名稱。
該屬性的默認值是根據(jù)不同操作系統(tǒng)來定義的,在 Windows 系統(tǒng)中,RABBITMQ_NODENAME 屬性的默認值為 rabbit@%COMPUTERNAME% ,即我們電腦的名稱;在 Centos 系統(tǒng)中,RABBITMQ_NODENAME 屬性的默認值為 rabbit@$HOSTNAME ,即我們主機的名稱。
同樣地,如果我們想自定義 RabbitMQ 服務(wù)的節(jié)點名稱,我們可以這樣來做:
// 假定我們需要將當前 RabbitMQ 服務(wù)所在節(jié)點的名稱修改為 rabbitmq-server-one
RABBITMQ_NODENAME="rabbitmq-server-one"
Tips: 一般來說,如果我們的 RabbitMQ 服務(wù)只有一個節(jié)點,是不會修改 RabbitMQ 的服務(wù)名稱的,如果我們的 RabbitMQ 服務(wù)存在多個節(jié)點,即 2個及 2 個以上節(jié)點時,我們需要根據(jù)每個 RabbitMQ 所起到的服務(wù)來為不同的 RabbitMQ 節(jié)點設(shè)置服務(wù)名稱。
RABBITMQ_USE_LONGNAME 屬性
RABBITMQ_USE_LONGNAME 屬性是是否啟用 RabbitMQ 全量名稱的開關(guān),當我們開啟后,我們每個 RabbitMQ 節(jié)點的名稱以及其他可命名的地方都會采用完整名稱規(guī)則的方式來進行命名。
該屬性的默認值為 false ,即不使用 RabbitMQ 全量名稱規(guī)則來命名,只是用默認的正常規(guī)則來進行命名,如果我們需要打開 RabbitMQ 全量命名,我們可以這樣打開:
RABBITMQ_USE_LONGNAME=true
Tips: 在實際工作中,很少會使用 RabbitMQ 的全量命名規(guī)則,因為這種命名策略生成的名稱非常長,且不易讀,不利于我們對 RabbitMQ 服務(wù)節(jié)點的維護,當然,如果我們必須要使用這種命名規(guī)則,也是無可厚非的。
RABBITMQ_SERVICENAME 屬性
RABBITMQ_SERVICENAME 屬性用來描述 RabbitMQ 服務(wù)的服務(wù)名稱。
該屬性只對 Windows 系統(tǒng)起作用,其默認值為 RabbitMQ ,在 Centos 系統(tǒng)中,RabbitMQ 的服務(wù)名稱不可修改,統(tǒng)一被命名為 rabbitmq-server.service 。
那么,在 Windows 系統(tǒng)中,如果我們想修改 RabbitMQ 的服務(wù)名稱,我們只需要找到 services.msc 文件,并以文本文檔的類型打開它,在里面找到 RABBITMQ_SERVICENAME 屬性,將它的值修改成我們想要的名稱即可,如下代碼所示:
// 假定我們需要修改服務(wù)名稱為 rabbitmq-server
RABBITMQ_SERVICENAME="rabbitmq-server"
RABBITMQ_CONSOLE_LOG 屬性
RABBITMQ_CONSOLE_LOG 屬性用來規(guī)定 RabbitMQ 服務(wù)所生成的服務(wù)日志的路徑,如果沒有設(shè)置該屬性,則 RabbitMQ 不會生成任何服務(wù)日志。
該屬性的默認值為空,即默認沒有規(guī)定 RabbitMQ 服務(wù)日志的生成位置。
如果我們想指定 RabbitMQ 服務(wù)所生成的位置,我們只需要將路徑賦值給 RABBITMQ_CONSOLE_LOG 屬性即可,如下代碼所示:
RABBITMQ_CONSOLE_LOG=/usr/temp/rabbtmq-log/one.log
RABBITMQ_DIST_PORT 屬性
RABBITMQ_DIST_PORT 屬性用來描述 RabbitMQ 服務(wù)節(jié)點間進行通信的端口號。
該屬性的默認值為 RABBITMQ_NODE_PORT + 20000 。
修改方式如下代碼所示:
// 假定我們需要修改端口號為 RABBITMQ_NODE_PORT + 20001
RABBITMQ_DIST_PORT=RABBITMQ_NODE_PORT + 20001
Tips: 1. 在實際工作中,一般不會刻意去修改 RabbitMQ 服務(wù)節(jié)點間進行通信的端口號,除非我們的應(yīng)用程序所綁定的端口與該端口發(fā)生了沖突。
2. 修改 RabbitMQ 服務(wù)節(jié)點間通信端口號我們可以采用一種自增的原則,即我們不要修改 RABBITMQ_NODE_PORT ,我們修改的是后面的 20000 ,將 20000 進行一次累加即可。
3.rabbitmq-env.conf 文件中的所有屬性在發(fā)生變化之后,都需要重啟我們的 RabbitMQ 服務(wù)才能生效。
3. RabbitMQ 基礎(chǔ)配置文件及參數(shù)
3.1 文件定義與路徑
RabbitMQ 基礎(chǔ)配置文件主要用來對 RabbitMQ 服務(wù)本身做一些配置,從而來滿足我們的業(yè)務(wù)需求。同樣地,該配置文件也是根據(jù)不同的操作系統(tǒng)來進行命名的,在 Windows 系統(tǒng)中,該配置文件被稱為 rabbitmq-conf.bat , 在 Centos 系統(tǒng)中,該配置文件被稱為 rabbitmq.conf 。
在 Centos 系統(tǒng)中,該配置文件默認的路徑為 /etc/rabbitmq/ ,在 Windows 系統(tǒng)中,該配置文件默認的路徑為 %APPDATA%\RabbitMQ ,其中,APPDATA 指的是 RabbitMQ 中數(shù)據(jù)文件所在的路徑。
3.2 核心配置屬性介紹
listeners 屬性
listeners 屬性是 AMQP 協(xié)議用來監(jiān)聽 tcp 端口的監(jiān)聽器,完整屬性名稱為 listeners.tcp.default 。
該屬性的默認值為 5672 ,即 AMQP 協(xié)議默認監(jiān)聽 5672 端口。
修改方式同上,這里不再贅述。
log.file.level 屬性
log.file.level 屬性用來定義 RabbitMQ 服務(wù)日志的打印級別,一共有 4 種日志打印級別,分別是 error 、warning 、info 、debug,這四種日志級別根據(jù)這個順序互相包含,即 debug 級別的日志會打印出 error 、warning、info、debug 的所有數(shù)據(jù)。
該屬性默認值為 info ,即默認的服務(wù)日志打印級別為 info 級別,會打印包括 error 、warning 、info 的所有數(shù)據(jù)。
修改方式同上,這里不再贅述。
channel_max & channel_operation_timeout 屬性
channel_max 屬性是用來規(guī)定具體的一個頻道與客戶端的最大連接數(shù)量,該數(shù)量的默認值為 2047 。
channel_operation_timeout 屬性是用來規(guī)定獲取具體的一個頻道連接的最大超時時間,該時間默認值為 15000 毫秒。
修改方式同上,這里不再贅述。
max_message_size & heartbeat & default_vhost 屬性
max_message_size 屬性用來規(guī)定一條消息的最大占用空間,該屬性的單位為比特,默認值為 134217728 ,最大值為 536870912 。
heartbeat 屬性用來規(guī)定 RabbitMQ 服務(wù)中心跳檢測的超時時間,如果該屬性的值設(shè)置為 0 ,則 RabbitMQ 服務(wù)的心跳檢測機制會自動關(guān)閉,該屬性的默認值為 60 秒。
default_vhost 屬性用來規(guī)定 RabbitMQ 服務(wù)中默認的虛擬主機名稱,默認值為 / 。
修改方式同上,這里不再贅述。
default_user & default_pass & default_user_tags & default_permissions 屬性
default_user 屬性和 default_pass 屬性分別用來規(guī)定 RabbitMQ 服務(wù)中默認的用戶名和密碼,默認值均為 guest 。
default_user_tags 屬性用來對用戶的角色進行設(shè)置,默認值為 administrator,即默認用戶為 RabbitMQ 服務(wù)的超級管理員,如下代碼所示:
default_user_tags.administrator = true
default_permissions 屬性用來規(guī)定用戶的默認權(quán)限,默認值為所有用戶都可以對 RabbitMQ 進行配置,以及讀寫操作。
如果我們想修改用戶的權(quán)限,那么我們需要這樣進行修改:
default_permissions.configure = .*
default_permissions.read = .*
default_permissions.write = .*
上述代碼中,configure 用來設(shè)置是否允許用戶對 RabbitMQ 進行配置,read 用來設(shè)置用戶的讀權(quán)限,write 用來設(shè)置用戶的寫權(quán)限。
cluster_formation.classic_config.nodes 屬性
cluster_formation.classic_config.nodes 屬性用來設(shè)置不同 RabbitMQ 服務(wù)節(jié)點間連接,該屬性會作為一個列表生效,即該列表中的所有 RabbitMQ 服務(wù)節(jié)點在 RabbitMQ 服務(wù)啟動時都將被啟動,且各節(jié)點間的通信通道將被打開。
那么該如何定義我們所需要的節(jié)點呢?如下代碼所示:
// 假定我們有兩個服務(wù)節(jié)點需要通信
cluster_formation.classic_config.nodes.1 = rabbit@hostname1
cluster_formation.classic_config.nodes.2 = rabbit@hostname2
Tips: 1. rabbitmq.conf 文件中的所有屬性,一經(jīng)修改,需要重啟 RabbitMQ 服務(wù)才可生效。
2. 出于不同的安裝方式,rabbitmq.conf 配置文件可能有的安裝方式不會自動生成,如果需要,我們可以在上述指定目錄新建一個 rabbitmq.conf 文件,并重啟 RabbitMQ 服務(wù)。
4. RabbitMQ 額外配置文件
文件介紹
通過對上述 RabbitMQ 環(huán)境配置文件以及 RabbitMQ 基礎(chǔ)配置文件及其中的核心屬性的介紹,我們已經(jīng)將 RabbitMQ 中的所有核心配置項全部介紹完畢了,這些核心配置項基本可以滿足我們自定義 RabbitMQ 98% 的需求的需要。
RabbitMQ 額外配置文件是對上述 RabbitMQ 基礎(chǔ)配置文件的補充,當我們對這個額外配置文件做了自定義配置之后,那么我們所配置的內(nèi)容會和 RabbitMQ 基礎(chǔ)配置文件相合并,但是這個額外配置文件是通過 erlang 語言的語法來配置的,如果我們想自定義該配置文件的話,還需要我們對 erlang 語言有所了解。
出于本套課程的初衷考慮,本節(jié)不會對 RabbitMQ 額外配置文件做進一步的介紹,我們只需要了解 RabbitMQ 配置文件中存在這么一個額外的配置文件即可,這個配置文件在實際工作中幾乎是不使用的。
RabbitMQ 額外配置文件只存在于 Centos 系統(tǒng)中,文件名稱默認為 advanced.config 。在 Centos 系統(tǒng)中,該文件位于 /etc/rabbitmq 路徑下;在 Windows 系統(tǒng)中,該文件位于 %APPDATA%\RabbitMQ 路徑下,其中,APPDATA 指的是 RabbitMQ 中數(shù)據(jù)文件的所在位置。
5. 小結(jié)

本小節(jié)主要對 RabbitMQ 中的配置文件,及其配置文件屬性做了詳細介紹。針對基礎(chǔ)核心配置文件,例如,RabbitMQ 環(huán)境配置文件和 RabbitMQ 基礎(chǔ)配置文件,對這些配置文件中的各個核心配置屬性都做了詳細介紹,對于不需要各位同學(xué)掌握的 RabbitMQ 額外配置文件 advanced.config ,各位同學(xué)只需要知道它的作用即可。