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