中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

做網(wǎng)站單頁視頻關(guān)鍵詞網(wǎng)站排名軟件

做網(wǎng)站單頁視頻,關(guān)鍵詞網(wǎng)站排名軟件,怎樣建設(shè)美麗中國?,蚌埠市做網(wǎng)站1、Rabbitmq管理 1.1、多租戶與權(quán)限 每一個(gè)RabbitMQ 服務(wù)器都能創(chuàng)建虛擬的消息服務(wù)器,我們稱之為虛擬主機(jī)(virtual host) ,簡稱為vhost 。每一個(gè)vhost 本質(zhì)上是一個(gè)獨(dú)立的小型RabbitMQ 服務(wù)器,擁有自己獨(dú)立的隊(duì)列、交換器及綁定關(guān)系等,井且它…

1、Rabbitmq管理

1.1、多租戶與權(quán)限

????????每一個(gè)RabbitMQ 服務(wù)器都能創(chuàng)建虛擬的消息服務(wù)器,我們稱之為虛擬主機(jī)(virtual host) ,簡稱為vhost 。每一個(gè)vhost 本質(zhì)上是一個(gè)獨(dú)立的小型RabbitMQ 服務(wù)器,擁有自己獨(dú)立的隊(duì)列、交換器及綁定關(guān)系等,井且它擁有自己獨(dú)立的權(quán)限。vhost 就像是虛擬機(jī)與物理服務(wù)器一樣,它們?cè)诟鱾€(gè)實(shí)例間提供邏輯上的分離,為不同程序安全保密地運(yùn)行數(shù)據(jù),它既能將同一個(gè)RabbitMQ 中的眾多客戶區(qū)分開,又可以避免隊(duì)列和交換器等命名沖突。vhost 之間是絕對(duì)隔離的,無法將vhost1中的交換器與vhost2 中的隊(duì)列進(jìn)行綁定,這樣既保證了安全性,又可以確??梢浦残?。如果在使用RabbitMQ 達(dá)到一定規(guī)模的時(shí)候,建議用戶對(duì)業(yè)務(wù)功能、場(chǎng)景進(jìn)行歸類區(qū)分,并為之分配獨(dú)立的vhost。

????????vhost 是AMQP 概念的基礎(chǔ),客戶端在連接的時(shí)候必須制定一個(gè)vhost。?RabbitMQ 默認(rèn)創(chuàng)建的vhost 為" /" , 如果不需要多個(gè)vhost 或者對(duì)vhost 的概念不是很理解,那么用這個(gè)默認(rèn)的vhost 也是非常合理的,使用默認(rèn)的用戶名guest 和密碼guest 就可以訪問它。但是為了安全和方便,建議重新建立一個(gè)新的用戶來訪問它。

????????可以使用rabbitmqctl add_vhost {vhost} 命令創(chuàng)建一個(gè)新的vhost,大括號(hào)里的參數(shù)表示vhost 的名稱。

[root@myblnp ~]# rabbitmqctl add_vhost vhost1
Adding vhost "vhost1" ...
[root@myblnp ~]#

????????可以使用 rabbitmqctl list_vhosts [vhostinfoitem...] 來羅列當(dāng)前vhost 的相關(guān)信息。目前vhostinfoitem 的取值有2 個(gè)。

  • name: 表示vhost 的名稱。
  • tracing: 表示是否使用了RabbitMQ 的trace 功能。
[root@myblnp ~]# rabbitmqctl list_vhosts
Listing vhosts ...
name
vhost1
/
[root@myblnp ~]# rabbitmqctl list_vhosts tracing
Listing vhosts ...
tracing
false
false
[root@myblnp ~]# rabbitmqctl list_vhosts name tracing
Listing vhosts ...
name    tracing
vhost1  false
/       false
[root@myblnp ~]# 

????????對(duì)應(yīng)的刪除vhost 的命令是: rabbitmqctl delete_vhost {vhost) ,其中大括號(hào)里面的參數(shù)表示vhost 的名稱。刪除一個(gè)vhost 同時(shí)也會(huì)刪除其下所有的隊(duì)列、交換器、綁定關(guān)系、用戶權(quán)限、參數(shù)和策略等信息。

[root@myblnp ~]# rabbitmqctl delete_vhost vhost1
Deleting vhost "vhost1" ...
[root@myblnp ~]# 

????????AMQP 協(xié)議中并沒有指定權(quán)限在vhost 級(jí)別還是在服務(wù)器級(jí)別實(shí)現(xiàn),由具體的應(yīng)用自定義。在RabbitMQ 中,權(quán)限控制則是以vhost 為單位的。當(dāng)創(chuàng)建一個(gè)用戶時(shí),用戶通常會(huì)被指派給至少一個(gè)vhost,并且只能訪問被指派的vhost 內(nèi)的隊(duì)列、交換器和綁定關(guān)系等。因此, RabbitMQ中的授予權(quán)限是指在vhost 級(jí)別對(duì)用戶而言的權(quán)限授予。

????????相關(guān)的授予權(quán)限命令為: rabbitmqctl set_permissions [-p vhost] {user}?{conf} {write}?{read}?。其中各個(gè)參數(shù)的含義如下所述。

  • vhost : 授予用戶訪問權(quán)限的 vhost 名稱,可以設(shè)置為默認(rèn)值,即 vhost ?為 "/"
  • user: 可以訪問指定vhost 的用戶名。
  • conf: 一個(gè)用于匹配用戶在哪些資源上擁有可配置權(quán)限的正則表達(dá)式。
  • write: 一個(gè)用于匹配用戶在哪些資源上擁有可寫權(quán)限的正則表達(dá)式。
  • read : 一個(gè)用于匹配用戶在哪些資源上擁有可讀權(quán)限的正則表達(dá)式。

注意:可配直指的是隊(duì)列和交換器的創(chuàng)建及刪除之類的操作;可寫指的是發(fā)布消息;可讀指與消息有關(guān)的操作,包括讀取消息及清空整個(gè)隊(duì)列等。

?關(guān)于 AMQP 命令與權(quán)限的映射關(guān)系:

AMQP命令可配置可寫可讀
Exchange.Declareexchange
Exchange.Declare (with AE)exchangeexchange(AE)exchange
Exchange.Deleteexchange
Queue.Declarequeue
Queue.Declare (with DLX)queueexchange(DLX)queue
Queue.Deletequeue
Exchange.Bindexchange (destination)exchange (source)
Exchange.Unbindexchange (destination)exchange (source)
Queue.Bindqueueexchange
Queue.Unbindqueueexchange
Basic.Publishexchange
Basic.Getqueue
Basic.Consumequeue
Queue.Puragequeue

????????授予 root 用戶可訪問虛擬主機(jī)vhostl,并在所有資源上都具備可配置、可寫及可讀的權(quán)限,示例如下:

[root@myblnp ~]# rabbitmqctl add_vhost vhost1
Adding vhost "vhost1" ...
[root@myblnp ~]#
[root@myblnp ~]# rabbitmqctl add_user root
Adding user "root" ...
Password: 
root
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
[root@myblnp ~]#
[root@myblnp ~]# rabbitmqctl set_permissions -p vhost1 root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "vhost1" ...
[root@myblnp ~]#

????????授予root 用戶可訪問虛擬主機(jī)vhost2 , 在以"queue" 開頭的資源上具備可配置權(quán)限, 并在所有資源上擁有可寫、可讀的權(quán)限, 示例如下:

[root@myblnp ~]# rabbitmqctl add_vhost vhost2
Adding vhost "vhost2" ...
[root@myblnp ~]#
[root@myblnp ~]#
[root@myblnp ~]# rabbitmqctl set_permissions -p vhost2 root "^queue.*" ".*" ".*"
Setting permissions for user "root" in vhost "vhost2" ...
[root@myblnp ~]#

????????清除權(quán)限也是在vhost 級(jí)別對(duì)用戶而言的。清除權(quán)限的命令為rabbitmqctl clear_permissions [-p vhost] { username} 。其中vhost 用于設(shè)置禁止用戶訪問的虛擬主機(jī)的名稱, 默認(rèn)為"/ " ; username 表示禁止訪問特定虛擬主機(jī)的用戶名稱。

[root@myblnp ~]# rabbitmqctl clear_permissions -p vhost1 root
Clearing permissions for user "root" in vhost "vhost1" ...
[root@myblnp ~]# 

????????在RabbitMQ 中有兩個(gè)Shell 命令可以列舉權(quán)限信息。第一個(gè)命令是rabbitmqctl list_permissions [-p vhost} ,用來顯示虛擬主機(jī)上的權(quán)限;第二個(gè)命令是rabbitmqctl list_user permissions {username}?,用來顯示用戶的權(quán)限。

[root@myblnp ~]# rabbitmqctl list_permissions -p /
Listing permissions for vhost "/" ...
user    configure       write   read
admin   .*      .*      .*
guest   .*      .*      .*
[root@myblnp ~]# rabbitmqctl list_permissions -p vhost1
Listing permissions for vhost "vhost1" ...[root@myblnp ~]# rabbitmqctl list_user_permissions root
Listing permissions for user "root" ...[root@myblnp ~]# rabbitmqctl list_user_permissions admin
Listing permissions for user "admin" ...
vhost   configure       write   read
/       .*      .*      .*
[root@myblnp ~]# 

rabbitmqctl 工具的標(biāo)準(zhǔn)語法如下( [ ])表示可選參數(shù), {}表示必選參數(shù):

rabbitmqctl [-n node] [-t timeout] [-q] (command) {command options...} [-n node]

? 【-n node】

????????默認(rèn)節(jié)點(diǎn)是" rabbit@hostname" 此處的hostname 是主機(jī)名稱。在一個(gè)名為node.hidden.com"
的主機(jī)上, RabbitMQ 節(jié)點(diǎn)的名稱通常是rabbit@node (除非RABBITMQ_NODENAME 參數(shù)在啟動(dòng)時(shí)被設(shè)置成了非默認(rèn)值).hostname -s 命令的輸出通常是"@"標(biāo)志后的東西。

【-q】

????????.使用-q 標(biāo)志來啟用quiet 模式,這樣可以屏蔽一些消息的輸出。默認(rèn)不開啟quiet 模式。

【-t timeout】

????????操作超時(shí)時(shí)間(秒為單位),只適用于"list_xxx" 類型的命令,默認(rèn)是無窮大。

[root@myblnp ~]# rabbitmqctl list_vhosts
Listing vhosts ...
name
vhost1
/
[root@myblnp ~]# rabbitmqctl list_vhosts -q
name
vhost1
/
[root@myblnp ~]# 

1.2、用戶管理

????????創(chuàng)建用戶的命令為rabbitmqctl add_user {username} {password} 。其中username 表示要?jiǎng)?chuàng)建的用戶名稱; password 表示創(chuàng)建用戶登錄的密碼。具體創(chuàng)建一個(gè)用戶名為root 、密碼為root123 的用戶:

[root@myblnp ~]# rabbitmqctl add_user root root123
Adding user "root" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
[root@myblnp ~]# 

????????可以通過rabbitmqctl change_password {username} {newpassword} 命令來更改指定用戶的密碼, 其中username 表示要變更密碼的用戶名稱, newpassword 表示要變更的新的密碼。舉例,將root 用戶的密碼變更為root321 :

[root@myblnp ~]# rabbitmqctl change_password root root321
Changing password for user "root" ...
[root@myblnp ~]# 

????????同樣可以清除密碼,這樣用戶就不能使用密碼登錄了,對(duì)應(yīng)的操作命令為rabbitmqctl clear_password {username} ,其中username 表示要清除密碼的用戶名稱。

????????使用rabbitmqctl authenticate_user {userηame} {password} 可以通過密碼來驗(yàn)證用戶,其中username 表示需要被驗(yàn)證的用戶名稱, password 表示密碼。下面示例中分別采用root321 和root322 來驗(yàn)證root 用戶:

[root@myblnp ~]# rabbitmqctl authenticate_user root root321
Authenticating user "root" ...
Success
[root@myblnp ~]# rabbitmqctl authenticate_user root root322
Authenticating user "root" ...
Error:
Error: failed to authenticate user "root"
user 'root' - invalid credentials
[root@myblnp ~]# 

????????刪除用戶的命令是rabbitmqctl delete_user {username) ,其中username 表示要?jiǎng)h除的用戶名稱。刪除root 用戶的示例如下:

[root@myblnp ~]# rabbitmqctl delete_user root
Deleting user "root" ...
[root@myblnp ~]# 

????????rabbitmqctl list_users 命令可以用來羅列當(dāng)前的所有用戶。每個(gè)結(jié)果行都包含用戶名稱,其后緊跟用戶的角色(tags) 。示例如下:

[root@myblnp ~]# rabbitmqctl list_users
Listing users ...
user    tags
admin   [administrator]
guest   [administrator]
root    []
[root@myblnp ~]# 

用戶的角色分為5 種類型:

  • none: 無任何角色。新創(chuàng)建的用戶的角色默認(rèn)為none 。
  • management: 可以訪問Web 管理頁面
  • policymaker: 包含management 的所有權(quán)限,并且可以管理策略(Policy) 和參數(shù)(Parameter)
  • monitoring: 包含management 的所有權(quán)限,并且可以看到所有連接、信道及節(jié)點(diǎn)相關(guān)的信息。
  • administartor: 包含monitoring 的所有權(quán)限,井且可以管理用戶、虛擬主機(jī)、權(quán)限、策略、參數(shù)等。administator 代表了最高的權(quán)限。

????????用戶的角色可以通過rabbitmqctl set_user_tags {username} {tag ...} 命令設(shè)置。其中username 參數(shù)表示需要設(shè)置角色的用戶名稱; tag 參數(shù)用于設(shè)置0 個(gè)、1個(gè)或者多個(gè)的角色,設(shè)置之后任何之前現(xiàn)有的身份都會(huì)被刪除。示例如下:

[root@myblnp ~]# rabbitmqctl set_user_tags root monitoring
Setting tags for user "root" to [monitoring] ...
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl list_users -q
user    tags
admin   [administrator]
guest   [administrator]
root    [monitoring]
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl set_user_tags root policymaker -q
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl list_users -q
user    tags
admin   [administrator]
guest   [administrator]
root    [policymaker]
[root@myblnp ~]# rabbitmqctl set_user_tags root
Setting tags for user "root" to [] ...
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl list_users -q
user    tags
admin   [administrator]
guest   [administrator]
root    []
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl set_user_tags root monitoring,policymaker
Setting tags for user "root" to [monitoring,policymaker] ...
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl list_users -q
user    tags
admin   [administrator]
guest   [administrator]
root    [monitoring,policymaker]
[root@myblnp ~]# 

1.3、WEB端管理

????????RabbitMQ management 插件可以提供Web 管理界面用來管理如前面所述的虛擬主機(jī)、用戶等,也可以用來管理隊(duì)列、交換器、綁定關(guān)系、策略、參數(shù)等,還可以用來監(jiān)控RabbitMQ服務(wù)的狀態(tài)及一些數(shù)據(jù)統(tǒng)計(jì)類信息,可謂是功能強(qiáng)大,基本上能夠涵蓋所有RabbitMQ 管理的功能。

????????在使用Web 管理界面之前需要先啟用RabbitMQ management 插件。RabbitMQ 提供了很多的插件,默認(rèn)存放在$RABBITMQ_HOME/plugins 目錄下,如下所示。

[root@myblnp plugins]# ls -al
total 13812
drwxr-xr-x. 2 rabit rabit    4096 May  5  2021 .
drwxr-xr-x. 7 rabit rabit    4096 May  5  2021 ..
-rw-r--r--. 1 rabit rabit   13402 May  5  2021 accept-0.3.5.ez
-rw-r--r--. 1 rabit rabit  106775 May  5  2021 amqp10_client-3.8.16.ez
-rw-r--r--. 1 rabit rabit   45582 May  5  2021 amqp10_common-3.8.16.ez
-rw-r--r--. 1 rabit rabit  414782 May  5  2021 amqp_client-3.8.16.ez
-rw-r--r--. 1 rabit rabit   19784 May  5  2021 aten-0.5.5.ez
-rw-r--r--. 1 rabit rabit    3190 May  5  2021 base64url-0.0.1.ez
-rw-r--r--. 1 rabit rabit  291030 May  5  2021 cowboy-2.8.0.ez
-rw-r--r--. 1 rabit rabit  644414 May  5  2021 cowlib-2.9.1.ez
-rw-r--r--. 1 rabit rabit   18574 May  5  2021 credentials_obfuscation-2.4.0.ez
-rw-r--r--. 1 rabit rabit  165282 May  5  2021 cuttlefish-3.0.0.ez
-rw-r--r--. 1 rabit rabit 2486961 May  5  2021 eetcd-0.3.3.ez
-rw-r--r--. 1 rabit rabit   13832 May  5  2021 gen_batch_server-0.8.4.ez
-rw-r--r--. 1 rabit rabit   69329 May  5  2021 goldrush-0.1.9.ez
-rw-r--r--. 1 rabit rabit   97349 May  5  2021 gun-1.3.3.ez
-rw-r--r--. 1 rabit rabit  831324 May  5  2021 jose-1.11.1.ez
-rw-r--r--. 1 rabit rabit   99032 May  5  2021 jsx-2.11.0.ez
-rw-r--r--. 1 rabit rabit  234023 May  5  2021 lager-3.9.1.ez
-rw-r--r--. 1 rabit rabit  167679 May  5  2021 observer_cli-1.6.1.ez
-rw-r--r--. 1 rabit rabit  223866 May  5  2021 prometheus-4.6.0.ez
-rw-r--r--. 1 rabit rabit  388178 May  5  2021 ra-1.1.8.ez
-rw-r--r--. 1 rabit rabit 2651488 May  5  2021 rabbit-3.8.16.ez
-rw-r--r--. 1 rabit rabit  802365 May  5  2021 rabbit_common-3.8.16.ez
-rw-r--r--. 1 rabit rabit  257342 May  5  2021 rabbitmq_amqp1_0-3.8.16.ez
-rw-r--r--. 1 rabit rabit   33874 May  5  2021 rabbitmq_auth_backend_cache-3.8.16.ez
-rw-r--r--. 1 rabit rabit   17174 May  5  2021 rabbitmq_auth_backend_http-3.8.16.ez
-rw-r--r--. 1 rabit rabit   53216 May  5  2021 rabbitmq_auth_backend_ldap-3.8.16.ez
-rw-r--r--. 1 rabit rabit   52388 May  5  2021 rabbitmq_auth_backend_oauth2-3.8.16.ez
-rw-r--r--. 1 rabit rabit   24428 May  5  2021 rabbitmq_auth_mechanism_ssl-3.8.16.ez
-rw-r--r--. 1 rabit rabit   76414 May  5  2021 rabbitmq_aws-3.8.16.ez
-rw-r--r--. 1 rabit rabit   35523 May  5  2021 rabbitmq_consistent_hash_exchange-3.8.16.ez
-rw-r--r--. 1 rabit rabit   27474 May  5  2021 rabbitmq_event_exchange-3.8.16.ez
-rw-r--r--. 1 rabit rabit  266831 May  5  2021 rabbitmq_federation-3.8.16.ez
-rw-r--r--. 1 rabit rabit   14743 May  5  2021 rabbitmq_federation_management-3.8.16.ez
-rw-r--r--. 1 rabit rabit   26640 May  5  2021 rabbitmq_jms_topic_exchange-3.8.16.ez
-rw-r--r--. 1 rabit rabit 1288744 May  5  2021 rabbitmq_management-3.8.16.ez
-rw-r--r--. 1 rabit rabit  191385 May  5  2021 rabbitmq_management_agent-3.8.16.ez
-rw-r--r--. 1 rabit rabit  203899 May  5  2021 rabbitmq_mqtt-3.8.16.ez
-rw-r--r--. 1 rabit rabit   27153 May  5  2021 rabbitmq_peer_discovery_aws-3.8.16.ez
-rw-r--r--. 1 rabit rabit   59166 May  5  2021 rabbitmq_peer_discovery_common-3.8.16.ez
-rw-r--r--. 1 rabit rabit   56186 May  5  2021 rabbitmq_peer_discovery_consul-3.8.16.ez
-rw-r--r--. 1 rabit rabit   55590 May  5  2021 rabbitmq_peer_discovery_etcd-3.8.16.ez
-rw-r--r--. 1 rabit rabit   31125 May  5  2021 rabbitmq_peer_discovery_k8s-3.8.16.ez
-rw-r--r--. 1 rabit rabit   99348 May  5  2021 rabbitmq_prelaunch-3.8.16.ez
-rw-r--r--. 1 rabit rabit   51326 May  5  2021 rabbitmq_prometheus-3.8.16.ez
-rw-r--r--. 1 rabit rabit    7652 May  5  2021 rabbitmq_random_exchange-3.8.16.ez
-rw-r--r--. 1 rabit rabit   18907 May  5  2021 rabbitmq_recent_history_exchange-3.8.16.ez
-rw-r--r--. 1 rabit rabit   49666 May  5  2021 rabbitmq_sharding-3.8.16.ez
-rw-r--r--. 1 rabit rabit  205865 May  5  2021 rabbitmq_shovel-3.8.16.ez
-rw-r--r--. 1 rabit rabit   27459 May  5  2021 rabbitmq_shovel_management-3.8.16.ez
-rw-r--r--. 1 rabit rabit  153370 May  5  2021 rabbitmq_stomp-3.8.16.ez
-rw-r--r--. 1 rabit rabit   72903 May  5  2021 rabbitmq_top-3.8.16.ez
-rw-r--r--. 1 rabit rabit   68241 May  5  2021 rabbitmq_tracing-3.8.16.ez
-rw-r--r--. 1 rabit rabit   86477 May  5  2021 rabbitmq_trust_store-3.8.16.ez
-rw-r--r--. 1 rabit rabit   49514 May  5  2021 rabbitmq_web_dispatch-3.8.16.ez
-rw-r--r--. 1 rabit rabit   52345 May  5  2021 rabbitmq_web_mqtt-3.8.16.ez
-rw-r--r--. 1 rabit rabit   66605 May  5  2021 rabbitmq_web_mqtt_examples-3.8.16.ez
-rw-r--r--. 1 rabit rabit   56616 May  5  2021 rabbitmq_web_stomp-3.8.16.ez
-rw-r--r--. 1 rabit rabit   52278 May  5  2021 rabbitmq_web_stomp_examples-3.8.16.ez
-rw-r--r--. 1 rabit rabit  108136 May  5  2021 ranch-2.0.0.ez
-rw-r--r--. 1 rabit rabit      59 May  5  2021 README
-rw-r--r--. 1 rabit rabit   77411 May  5  2021 recon-2.5.1.ez
-rw-r--r--. 1 rabit rabit   47501 May  5  2021 stdout_formatter-0.2.4.ez
-rw-r--r--. 1 rabit rabit   56947 May  5  2021 syslog-3.4.5.ez
-rw-r--r--. 1 rabit rabit   17593 May  5  2021 sysmon_handler-1.3.0.ez
[root@myblnp plugins]# 

????????其中以 .ez 擴(kuò)展名稱結(jié)尾的文件就是RabbitMQ 的插件, 上面文件中的rabbitmq_management-3.8.16.ez 就是指RabbitMQ Management 插件。啟動(dòng)插件的命令不是使用rabbitmqctl 工具, 而是使用rabbitmq-plugins ,其語法格式為:

rabbitmq-plugins [-n node] {command} [command options ... ]

????????啟動(dòng)插件是使用rabbitmq-plugins enable [plugin - name] ,關(guān)閉插件的命令是rabbitmq-plugins disable [plugin-name] 。執(zhí)行rabbitmq-plugins enable rabbitmq management 命令來開啟RabbitMQ managmenet 插件:

rabbitmq-plugins enable rabbitmq_management

可以通過rabbitmq-plugins list 命令來查看當(dāng)前插件的使用情況, 如下所示。其中標(biāo)記為 [E*] 的為顯式啟動(dòng),而[e*] 為隱式啟動(dòng), 如顯式啟動(dòng)rabbitmq_management 插件會(huì)同時(shí)隱式啟動(dòng)amqp_client 、cowboy 、cowlib 、rabbitmq_management_agent 、rabbitmq_web_dispatch 等另外5 個(gè)插件。

[root@myblnp plugins]# rabbitmq-plugins list
Listing plugins with pattern ".*" ...Configured: E = explicitly enabled; e = implicitly enabled| Status: * = running on rabbit@myblnp|/
[  ] rabbitmq_amqp1_0                  3.8.13
[  ] rabbitmq_auth_backend_cache       3.8.13
[  ] rabbitmq_auth_backend_http        3.8.13
[  ] rabbitmq_auth_backend_ldap        3.8.13
[  ] rabbitmq_auth_backend_oauth2      3.8.13
[  ] rabbitmq_auth_mechanism_ssl       3.8.13
[  ] rabbitmq_consistent_hash_exchange 3.8.13
[  ] rabbitmq_event_exchange           3.8.13
[  ] rabbitmq_federation               3.8.13
[  ] rabbitmq_federation_management    3.8.13
[  ] rabbitmq_jms_topic_exchange       3.8.13
[E*] rabbitmq_management               3.8.13
[e*] rabbitmq_management_agent         3.8.13
[  ] rabbitmq_mqtt                     3.8.13
[  ] rabbitmq_peer_discovery_aws       3.8.13
[  ] rabbitmq_peer_discovery_common    3.8.13
[  ] rabbitmq_peer_discovery_consul    3.8.13
[  ] rabbitmq_peer_discovery_etcd      3.8.13
[  ] rabbitmq_peer_discovery_k8s       3.8.13
[  ] rabbitmq_prometheus               3.8.13
[  ] rabbitmq_random_exchange          3.8.13
[  ] rabbitmq_recent_history_exchange  3.8.13
[  ] rabbitmq_sharding                 3.8.13
[  ] rabbitmq_shovel                   3.8.13
[  ] rabbitmq_shovel_management        3.8.13
[  ] rabbitmq_stomp                    3.8.13
[  ] rabbitmq_top                      3.8.13
[  ] rabbitmq_tracing                  3.8.13
[  ] rabbitmq_trust_store              3.8.13
[e*] rabbitmq_web_dispatch             3.8.13
[  ] rabbitmq_web_mqtt                 3.8.13
[  ] rabbitmq_web_mqtt_examples        3.8.13
[  ] rabbitmq_web_stomp                3.8.13
[  ] rabbitmq_web_stomp_examples       3.8.13
[root@myblnp plugins]# 

????????開啟rabbitmq_management 插件之后還需要重啟RabbitMQ 服務(wù)才能使其正式生效。之后就可以通過瀏覽器訪問htψ://localhost:15672/. 這樣會(huì)出現(xiàn)一個(gè)認(rèn)證登錄的界面,可以通過默認(rèn)的guest/guest 的用戶名和密碼來登錄。如果訪問的地址不是本地地址,比如在192.168.0.2的主機(jī)上訪問http://192.168.0.3:15672 的Web 管理頁面,使用默認(rèn)的guest 賬戶是訪問不了的。在之前比較古老的版本中可以訪問,但是出于安全性方面的考慮,在最近的一些版本中需要使用一個(gè)具有非none 的用戶角色的非guest 賬戶來訪問Web 管理頁面。

主界面

1.4、應(yīng)用與集群管理

1.4.1、應(yīng)用管理

指令:rabbitmqctl stop [pid_file]

????????用于停止運(yùn)行RabbitMQ 的Erlang 虛擬機(jī)和RabbitMQ 服務(wù)應(yīng)用。如果指定了pid_file,還需要等待指定進(jìn)程的結(jié)束。其中pid file 是通過調(diào)用rabbitmq-server 命令啟動(dòng)RabbitMQ 服務(wù)時(shí)創(chuàng)建的,默認(rèn)情況下存放于Mnesia 目錄中,可以通過RABBITMQ_PID_FILE這個(gè)環(huán)境變量來改變存放路徑。注意,如果使用rabbitmq-server -detach 這個(gè)帶有-detach 后綴的命令來啟動(dòng)RabbitMQ 服務(wù)則不會(huì)生成pid file 文件。

[root@myblnp plugins]# rabbitmqctl stop
Stopping and halting node rabbit@myblnp ...
[root@myblnp plugins]# rabbitmqctl stop
Stopping and halting node rabbit@myblnp ...
Error: unable to perform an operation on node 'rabbit@myblnp'. Please see diagnostics information and suggestions below.Most common reasons for this are:* Target node is unreachable (e.g. due to hostname resolution, TCP connection or firewall issues)* CLI tool fails to authenticate with the server (e.g. due to CLI tool's Erlang cookie not matching that of the server)* Target node is not runningIn addition to the diagnostics info below:* See the CLI, clustering and networking guides on https://rabbitmq.com/documentation.html to learn more* Consult server logs on node rabbit@myblnp* If target node is configured to use long node names, don't forget to use --longnames with CLI toolsDIAGNOSTICS
===========attempted to contact: [rabbit@myblnp]rabbit@myblnp:* connected to epmd (port 4369) on myblnp* epmd reports: node 'rabbit' not running at allno other nodes on myblnp* suggestion: start the nodeCurrent node details:* node name: 'rabbitmqcli-185-rabbit@myblnp'* effective user's home directory: /var/lib/rabbitmq* Erlang cookie hash: YGXJmh5ZMPKrew0h033R/Q==[root@myblnp plugins]# 

指令:rabbitmqctl shutdown?

????????用于停止運(yùn)行RabbitMQ 的Erlang 虛擬機(jī)和RabbitMQ 服務(wù)應(yīng)用。執(zhí)行這個(gè)命令會(huì)阻塞直到Erlang 虛擬機(jī)進(jìn)程退出。如果RabbitMQ 沒有成功關(guān)閉,則會(huì)返回一個(gè)非零值。這個(gè)命令和rabbitmqctl stop 不同的是,它不需要指定pid_file 而可以阻塞等待指定進(jìn)程的關(guān)閉。示例如下所示:

[root@myblnp ~]# rabbitmqctl shutdown
Shutting down RabbitMQ node rabbit@myblnp running at PID 15973
Waiting for PID 15973 to terminate
RabbitMQ node rabbit@myblnp running at PID 15973 successfully shut down
[root@myblnp ~]# systemctl status rabbitmq-server
● rabbitmq-server.service - RabbitMQ brokerLoaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled)Active: inactive (dead) since Tue 2023-09-12 10:30:16 CST; 14s agoProcess: 16437 ExecStop=/usr/sbin/rabbitmqctl shutdown (code=exited, status=69)Process: 15973 ExecStart=/usr/sbin/rabbitmq-server (code=exited, status=0/SUCCESS)Main PID: 15973 (code=exited, status=0/SUCCESS)Status: "Initialized"Sep 12 10:30:16 myblnp rabbitmqctl[16437]: attempted to contact: [rabbit@myblnp]
Sep 12 10:30:16 myblnp rabbitmqctl[16437]: rabbit@myblnp:
Sep 12 10:30:16 myblnp rabbitmqctl[16437]: * connected to epmd (port 4369) on myblnp
Sep 12 10:30:16 myblnp rabbitmqctl[16437]: * epmd reports: node 'rabbit' not running at all
Sep 12 10:30:16 myblnp rabbitmqctl[16437]: other nodes on myblnp: ['rabbitmqcli-553-rabbit']
Sep 12 10:30:16 myblnp rabbitmqctl[16437]: * suggestion: start the node
Sep 12 10:30:16 myblnp rabbitmqctl[16437]: Current node details:
Sep 12 10:30:16 myblnp rabbitmqctl[16437]: * node name: 'rabbitmqcli-239-rabbit@myblnp'
Sep 12 10:30:16 myblnp rabbitmqctl[16437]: * effective user's home directory: /var/lib/rabbitmq
Sep 12 10:30:16 myblnp rabbitmqctl[16437]: * Erlang cookie hash: YGXJmh5ZMPKrew0h033R/Q==
[root@myblnp ~]# 

指令:rabbitmqctl stop_app?

????????停止RabbitMQ 服務(wù)應(yīng)用,但是Erlang 虛擬機(jī)還是處于運(yùn)行狀態(tài)。此命令的執(zhí)行優(yōu)先于其他管理操作(這些管理操作需要先停止RabbitMQ 應(yīng)用),比如rabbitmqctl reset 。示例如下所示:

[root@myblnp ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@myblnp ...
[root@myblnp ~]# 

指令:rabbitmqctl start_app

????????啟動(dòng)RabbitMQ 應(yīng)用。此命令典型的用途是在執(zhí)行了其他管理操作之后,重新啟動(dòng)之前停止的RabbitMQ 應(yīng)用,比如rabbitmqctl reset 。示例如下:

[root@myblnp ~]# rabbitmqctl start_app
Starting node rabbit@myblnp ...
[root@myblnp ~]# 

?指令:rabbitmqctl wait [pid_file]

????????等待RabbitMQ 應(yīng)用的啟動(dòng)。它會(huì)等到pid_file 的創(chuàng)建,然后等待pid_file 中所代表的進(jìn)程啟動(dòng)。當(dāng)指定的進(jìn)程沒有啟動(dòng)RabbitMQ 應(yīng)用而關(guān)閉時(shí)將會(huì)返回失敗。

[root@myblnp ~]# rabbitmqctl wait
Error (argument validation): "No pid or pidfile specified"
Arguments given:waitUsagerabbitmqctl [--node <node>] [--longnames] [--quiet] wait [<pidfile>] [--pid|-P <pid>] [--timeout <timeout>]
[root@myblnp ~]# ps -ef | grep rabbit
rabbitmq 15498     1  0 09:59 ?        00:00:00 /usr/lib64/erlang/erts-10.7.2.5/bin/epmd -daemon
rabbitmq 16483     1  1 10:30 ?        00:00:10 /usr/lib64/erlang/erts-10.7.2.5/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -sbwt none -sbwtdcpu none -sbwtdio none -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa  -noshell -noinput -s rabbit boot -boot start_sasl -lager crash_log false -lager handlers [] --
rabbitmq 16498 16483  0 10:30 ?        00:00:00 erl_child_setup 32768
rabbitmq 16546 16498  0 10:30 ?        00:00:00 inet_gethost 4
rabbitmq 16547 16546  0 10:30 ?        00:00:00 inet_gethost 4
root     17591  1846  0 10:41 pts/0    00:00:00 grep --color=auto rabbit
[root@myblnp ~]# rabbitmqctl wait 16483
Waiting for pid file '16483' to appear
Error: operation wait on node rabbit@myblnp timed out. Timeout value used: 10000
[root@myblnp ~]# 

?指令:rabbitmqctl reset

????????將RabbitMQ 節(jié)點(diǎn)重置還原到最初狀態(tài)。包括從原來所在的集群中刪除此節(jié)點(diǎn),從管理數(shù)據(jù)庫中刪除所有的配置數(shù)據(jù),如己配置的用戶、vhost 等,以及刪除所有的持久化消息。執(zhí)行rabbitmqctl reset 命令前必須停止RabbitMQ 應(yīng)用(比如先執(zhí)行rabbitmqctl stop_app) 。示例如下:

[root@myblnp ~]# rabbitmqctl stop app
Stopping rabbit application on node rabbit@myblnp
[root@myblnp ~]# rabbitmqct1 reset
Resetting node rabbit@node

指令:rabbitmqctl force_reset

????????強(qiáng)制將RabbitMQ 節(jié)點(diǎn)重置還原到最初狀態(tài)。不同于rabbitmqctl reset 命令,rabbitmqctl force_reset 命令不論當(dāng)前管理數(shù)據(jù)庫的狀態(tài)和集群配置是什么,都會(huì)無條件地重直節(jié)點(diǎn)。它只能在數(shù)據(jù)庫或集群配置己損壞的情況下使用。與rabbitmqctl reset命令一樣,執(zhí)行rabbitmqctl force_reset 命令前必須先停止RabbitMQ 應(yīng)用。

[root@myblnp ~]# rabbitmqct1 stop_app
Stopping rabbit application on node rabbit@myblnp
[root@myblnp ~]# rabbitmqct1 force reset
Forcefully resetting node rabbit@myblnp

溫馨提示:如果安裝的rabbitmq有注冊(cè)服務(wù),并且忘記服務(wù)名的話??梢酝ㄟ^下面的指令查找下服務(wù)器已注冊(cè)的自啟服務(wù),看下rabbitmq的完整名稱。進(jìn)而通過服務(wù)命令查詢當(dāng)前rabbitmq的服務(wù)狀態(tài)。(Centos7)

systemctl list-unit-files --type=service | grep enabled

?1.4.2、集群管理

指令:rabbitmqctl joio_cluster {cluster_node} [--ram]

????????將節(jié)點(diǎn)加入指定集群中。在這個(gè)命令執(zhí)行前需要停止RabbitMQ 應(yīng)用井重置節(jié)點(diǎn)。

指令:rabbitmqctl cluster_status

? ? ? ? 顯示集群的狀態(tài)

指令:rabbitmqctl change_cluster_node_type {disc/ram}

????????修改集群節(jié)點(diǎn)的類型。在這個(gè)命令執(zhí)行前需要停止RabbitMQ 應(yīng)用。

指令:rabbitmqctl forget_cluster_ node [--offiine]

????????將節(jié)點(diǎn)從集群中刪除,允許離線執(zhí)行。

指令:rabbitmqctl update_ cluster_nodes {clusternode}

????????在集群中的節(jié)點(diǎn)應(yīng)用啟動(dòng)前咨詢clusternode 節(jié)點(diǎn)的最新信息, 井更新相應(yīng)的集群信息。這個(gè)和join_cluster 不同,它不加入集群??紤]這樣一種情況, 節(jié)點(diǎn)A 和節(jié)點(diǎn)B 都在集群中,當(dāng)節(jié)點(diǎn)A 離線了,節(jié)點(diǎn)C 又和節(jié)點(diǎn)B 組成了一個(gè)集群,然后節(jié)點(diǎn)B 又離開了集群, 當(dāng)A醒來的時(shí)候,它會(huì)嘗試聯(lián)系節(jié)點(diǎn)B ,但是這樣會(huì)失敗, 因?yàn)楣?jié)點(diǎn)B 己經(jīng)不在集群中了。Rabbitmqctl update_cluster_nodes -n, A、C 可以解決這種場(chǎng)景下出現(xiàn)的問題。示例如下:

##假設(shè)己有 myblnp 和node 組成的集群
##1.初始狀態(tài)
[root@myblnp ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@myblnp ...
BasicsCluster name: rabbit@myblnpDisk Nodesrabbit@myblnpRunning Nodesrabbit@myblnpVersionsrabbit@myblnp: RabbitMQ 3.8.13 on Erlang 22.3.4.12Maintenance statusNode: rabbit@myblnp, status: not under maintenanceAlarms(none)Network Partitions(none)ListenersNode: rabbit@myblnp, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@myblnp, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@myblnp, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0Feature flagsFlag: drop_unroutable_metric, state: disabled
Flag: empty_basic_get_metric, state: disabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
[root@myblnp ~]# 
##2. 關(guān)閉nodel 節(jié)點(diǎn)的應(yīng)用
[root@myblnp ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@myblnp
##3. 之后將node3 加入到集群中(rabbitmqctl join cluster rabbit@node2)
##4 . 再將node2 節(jié)點(diǎn)的應(yīng)用關(guān)閉
##5 . 最后啟動(dòng)nodel 節(jié)點(diǎn)的應(yīng)用, 此時(shí)會(huì)報(bào)錯(cuò)
[root@myblnp ~]# rabbitmqctl start_app
Starting node rabbit@myblnp
BOOT FAILED
Timeout contacting cluster nodes : [rabbit@node2) .
.. .. ..(省略)
##6. 如果在啟動(dòng)myblnp 節(jié)點(diǎn)的應(yīng)用之前咨詢node3 并更新相關(guān)集群信息則可以解決這個(gè)問題
[root@myblnp ~]# rabbitmqctl update_cluster_nodes rabbit@node3
Updating cluster nodes for rabbit@myblnp from rabbit@node3
[root@myblnp ~]# rabbitmqctl start_app
Starting node rabbit@myblnp
##7 . 最終集群狀態(tài)
[root@myblnp ~]# rabbitmqctl cluster status
Cluster status of node rabbit@myblnp
[{nodes , [{disc, [rabbit@myblnp , rabbit@node3]}]} ,
{running_nodes , [rabbit@node3 , rabbit@myblnp]} ,
{cluster name , <<"rabbit@myblnp " >>} ,
{partitions , [] } ,
{alarms , [{rabbit@node3 , []} , {rabbit@myblnp , []}]}]

指令:rabbitmqctl force_boot

????????確保節(jié)點(diǎn)可以啟動(dòng),即使它不是最后一個(gè)關(guān)閉的節(jié)點(diǎn)。通常情況下,當(dāng)關(guān)閉整個(gè)RabbitMQ集群時(shí),重啟的第一個(gè)節(jié)點(diǎn)應(yīng)該是最后關(guān)閉的節(jié)點(diǎn),因?yàn)樗梢钥吹狡渌?jié)點(diǎn)所看不到的事情。但是有時(shí)會(huì)有一些異常情況出現(xiàn),比如整個(gè)集群都掉電而所有節(jié)點(diǎn)都認(rèn)為它不是最后一個(gè)關(guān)閉的。在這種情況下,可以調(diào)用rabbitmqctl force_boot 命令,這就告訴節(jié)點(diǎn)可以無條件地啟動(dòng)節(jié)點(diǎn)。在此節(jié)點(diǎn)關(guān)閉后,集群的任何變化,它都會(huì)丟失。如果最后一個(gè)關(guān)閉的節(jié)點(diǎn)永久丟失了,那么需要優(yōu)先使用rabbitmqctl forget_cluster_node -offline 命令,因?yàn)樗梢源_保鏡像隊(duì)列的正常運(yùn)轉(zhuǎn)。

[root@myblnp ~]# rabbitmqctl force_boot
Forcing boot for Mnesia dir /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@node2
[root@myblnp ~]# rabbitmq-server -detached

指令:rabbitmqctl sync_queue [-p vhost] {queue}

????????指示未同步隊(duì)列queue 的slave 鏡像可以同步master 鏡像行的內(nèi)容。同步期間此隊(duì)列會(huì)被阻塞(所有此隊(duì)列的生產(chǎn)消費(fèi)者都會(huì)被阻塞),直到同步完成。此條命令執(zhí)行成功的前提是隊(duì)列queue 配置了鏡像。注意, 未同步隊(duì)列中的消息被耗盡后, 最終也會(huì)變成同步,此命令主要用于未耗盡的隊(duì)列。

[root@myblnp ~]# rabbitmqctl sync_queue queue
Synchronising queue 'queue ' in vhost '/'

指令:rabbitmqctl cancel_sync_queue [-p vhost] {queue}

????????取消隊(duì)列queue 同步鏡像的操作。示例如下:

[root@myblnp ~]# rabbitmqctl cancel_sync_queue queue
Stopping synchronising queue 'queue' in vhost ' /'

指令:rabbitmqctl set_cluster_name {name}

????????設(shè)置集群名稱。集群名稱在客戶端連接時(shí)會(huì)通報(bào)給客戶端。Federation 和Shovel 插件也會(huì)有用到集群名稱的地方。集群名稱默認(rèn)是集群中第一個(gè)節(jié)點(diǎn)的名稱,通過這個(gè)命令可以重新設(shè)置。在Web 管理界面的右上角有個(gè)"(change)"的地方,點(diǎn)擊也可以修改集群名稱。示例如下:

[root@myblnp ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@myblnp ...
BasicsCluster name: rabbit@myblnpDisk Nodesrabbit@myblnpRunning Nodesrabbit@myblnpVersionsrabbit@myblnp: RabbitMQ 3.8.13 on Erlang 22.3.4.12Maintenance statusNode: rabbit@myblnp, status: not under maintenanceAlarms(none)Network Partitions(none)ListenersNode: rabbit@myblnp, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@myblnp, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@myblnp, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0Feature flagsFlag: drop_unroutable_metric, state: disabled
Flag: empty_basic_get_metric, state: disabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
[root@myblnp ~]# rabbitmqctl set_cluster_name myblnps
Setting cluster name to myblnps ...
[root@myblnp ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@myblnp ...
BasicsCluster name: myblnpsDisk Nodesrabbit@myblnpRunning Nodesrabbit@myblnpVersionsrabbit@myblnp: RabbitMQ 3.8.13 on Erlang 22.3.4.12Maintenance statusNode: rabbit@myblnp, status: not under maintenanceAlarms(none)Network Partitions(none)ListenersNode: rabbit@myblnp, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@myblnp, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@myblnp, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0Feature flagsFlag: drop_unroutable_metric, state: disabled
Flag: empty_basic_get_metric, state: disabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
[root@myblnp ~]# 

1.5、服務(wù)端狀態(tài)

1.5.1、rabbitmqctl list_queues

完整命令:rabbitmqctl list_queues [-p vhost] [queueinfoitem ……]

????????此命令返回隊(duì)列的詳細(xì)信息,如果無[-p vhost] 參數(shù),將顯示默認(rèn)的vhost 為" /" 中的隊(duì)列詳情。queueinfoitem 參數(shù)用于指示哪些隊(duì)列的信息項(xiàng)會(huì)包含在結(jié)果集中,結(jié)果集的列順序?qū)⑵ヅ鋮?shù)的順序。queueinfoitem 可以是下面列表中的任何值。

  • name: 隊(duì)列名稱。
  • durable: 隊(duì)列是否持久化。
  • auto_delete: 隊(duì)列是否自動(dòng)刪除。
  • arguments : 隊(duì)列的參數(shù)。
  • policy : 應(yīng)用到隊(duì)列上的策略名稱。
  • pid: 隊(duì)列關(guān)聯(lián)的Erlang 進(jìn)程的ID 。
  • owner_pid: 處理排他隊(duì)列連接的Erlang 進(jìn)程D。如果此隊(duì)列是非排他的,此值將為空。
  • exclusive: 隊(duì)列是否是排他的。
  • exclusive_consumer_pid: 訂閱到此排他隊(duì)列的消費(fèi)者相關(guān)的信道關(guān)聯(lián)的Erlang進(jìn)程ID 。如果此隊(duì)列是非排他的,此值將為空。
  • exclusive_consumer_tag : 訂閱到此排他隊(duì)列的消費(fèi)者的consumerTag 。如果此隊(duì)列是非排他的,此值將為空。
  • messages_ready: 準(zhǔn)備發(fā)送給客戶端的消息個(gè)數(shù)。
  • messages_unacknowledged: 發(fā)送給客戶端但尚未應(yīng)答的消息個(gè)數(shù)。
  • messages: 準(zhǔn)備發(fā)送給客戶端和未應(yīng)答消息的總和。
  • messages_ready_ram: 駐留在內(nèi)存中messages_ready 的消息個(gè)數(shù)。
  • messages_unacknowledged_ram: 駐留在內(nèi)存中messages_unac_knowledged的消息個(gè)數(shù)。
  • messages_ram : 駐留在內(nèi)存中的消息總數(shù)。
  • messages_persistent : 隊(duì)列中持久化消息的個(gè)數(shù)。對(duì)于非持久化隊(duì)列來說總是0 。
  • messages_bytes: 隊(duì)列中所有消息的大小總和。這里不包括消息屬性或者任何其他開銷
  • messages_bytes_ready: 準(zhǔn)備發(fā)送給客戶端的消息的大小總和。
  • messages_bytes_unacknowledged: 發(fā)送給客戶端但尚未應(yīng)答的消息的大小總和。
  • messages_bytes_ram: 駐留在內(nèi)存中的messages_bytes 。
  • messages_bytes_persistent: 隊(duì)列中持久化的messages_bytes 。
  • disk_reads: 從隊(duì)列啟動(dòng)開始,己從磁盤中讀取該隊(duì)列的消息總次數(shù)。
  • disk_writes: 從隊(duì)列啟動(dòng)開始,己向磁盤隊(duì)列寫消息的總次數(shù)。
  • consumer: 消費(fèi)者數(shù)目。
  • consumer_utilisation: 隊(duì)列中的消息能夠立刻投遞給消費(fèi)者的比率,介于0 和1之間。這個(gè)受網(wǎng)絡(luò)擁塞或者Basic.Qos 的影響而小于1 。
  • memory: 與隊(duì)列相關(guān)的Erlang 進(jìn)程所消耗的內(nèi)存字節(jié)數(shù),包括棧、堆及內(nèi)部結(jié)構(gòu)。
  • slave_pids: 如果隊(duì)列是鏡像的,列出所有slave 鏡像的pid 。
  • synchronised_slave_pids: 如果隊(duì)列是鏡像的,列出所有己經(jīng)同步的slave 鏡像的pid 。
  • state : 隊(duì)列狀態(tài)。正常情況下是running : 如果隊(duì)列正常同步數(shù)據(jù)可能會(huì)有"{syncing, MsgCount}" 的狀態(tài);如果隊(duì)列所在的節(jié)點(diǎn)掉線了,則隊(duì)列顯示狀態(tài)為down (此時(shí)大多數(shù)的queueinfoitems 也將不可用〉。

????????如果沒有指定queueinfoitems ,那么此命令將顯示隊(duì)列的名稱和消息的個(gè)數(shù)。相關(guān)示例如下:

[root@myblnp ~]# rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name    messages
queue.normal    0
myAe_test       0
queue_demo      0
queue.dlx       1
queue.priority  1
[root@myblnp ~]# rabbitmqctl list_queues name
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name
queue.normal
myAe_test
queue_demo
queue.dlx
queue.priority
[root@myblnp ~]# rabbitmqctl list_queues name,durable
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name    durable
queue.normal    true
myAe_test       true
queue_demo      true
queue.dlx       true
queue.priority  true
[root@myblnp ~]# rabbitmqctl list_queues name,durable,arguments
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name    durable arguments
queue.normal    true    [{"x-dead-letter-exchange","exchange.dlx"},{"x-message-ttl",10000},{"x-dead-letter-routing-key","routingkey"}]
myAe_test       true    [{"x-queue-type","classic"}]
queue_demo      true    []
queue.dlx       true    []
queue.priority  true    [{"x-max-priority",10}]
[root@myblnp ~]# rabbitmqctl list_queues name,durable,policy
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name    durable policy
queue.normal    true
myAe_test       true
queue_demo      true
queue.dlx       true
queue.priority  true
[root@myblnp ~]# rabbitmqctl list_queues name,durable,policy,pid
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name    durable policy  pid
queue.normal    true            <rabbit@myblnp.2.1347.0>
myAe_test       true            <rabbit@myblnp.2.1350.0>
queue_demo      true            <rabbit@myblnp.2.1353.0>
queue.dlx       true            <rabbit@myblnp.2.1356.0>
queue.priority  true            <rabbit@myblnp.2.1359.0>
[root@myblnp ~]# rabbitmqctl list_queues name,durable,policy,pid,owner_pid
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name    durable policy  pid     owner_pid
queue.normal    true            <rabbit@myblnp.2.1347.0>
myAe_test       true            <rabbit@myblnp.2.1350.0>
queue_demo      true            <rabbit@myblnp.2.1353.0>
queue.dlx       true            <rabbit@myblnp.2.1356.0>
queue.priority  true            <rabbit@myblnp.2.1359.0>
[root@myblnp ~]# 

1.5.2、rabbitmqctl list_exchanges

完整命令:rabbitmqctl list_exchanges [-p vhost] [exchangeinfoitem ...]

????????返回交換器的詳細(xì)細(xì)節(jié),如果無[ - p vhost]?參數(shù),將顯示默認(rèn)的vhost 為 "/ " 中的交換器詳情。exchangeinfoitem 參數(shù)用于指示哪些信息項(xiàng)會(huì)包含在結(jié)果集中,結(jié)果集的列順序?qū)⑵ヅ鋮?shù)的順序。exchangeinfoitem 可以是下面列表中的任何值。

  • name: 交換器的名稱。
  • type: 交換器的類型。
  • durable : 設(shè)置是否持久化。durable 設(shè)置為true 表示持久化,反之是非持久化。持久化可以將交換器信息存盤, 而在服務(wù)器重啟的時(shí)候不會(huì)丟失相關(guān)信息。
  • auto_delete : 設(shè)直是否自動(dòng)刪除。
  • internal : 是否是內(nèi)置的。
  • arguments : 其他一些結(jié)構(gòu)化參數(shù),比如alternate-exchange 。
  • policy : 應(yīng)用到交換器上的策略名稱。

????????exchangeinfoitem 的內(nèi)容和客戶端中的channel.exchangeDeclare 方法的參數(shù)基本一致。如果沒有指定exchangeinfoitem. 那么此命令將顯示交換器的名稱和類型。相關(guān)示例如下:

[root@myblnp ~]# rabbitmqctl list_exchanges
Listing exchanges for vhost / ...
name    type
myAE    fanout
amq.match       headers
exchange_demo   directdirect
exchange.priority       fanout
amq.rabbitmq.trace      topic
exchange.dlx    direct
amq.topic       topic
amq.fanout      fanout
exchange.normal fanout
amq.direct      direct
amq.headers     headers
[root@myblnp ~]# rabbitmqctl list_exchanges name type durable auto_delete internal arguments policy -q
name    type    durable auto_delete     internal        arguments       policy
myAE    fanout  true    false   false   []
amq.match       headers true    false   false   []
exchange_demo   direct  true    false   false   []      AE2direct  true    false   false   []
exchange.priority       fanout  true    false   false   []
amq.rabbitmq.trace      topic   true    false   true    []
exchange.dlx    direct  true    false   false   []
amq.topic       topic   true    false   false   []
amq.fanout      fanout  true    false   false   []
exchange.normal fanout  true    false   false   []
amq.direct      direct  true    false   false   []
amq.headers     headers true    false   false   []
[root@myblnp ~]# 

1.5.3、rabbitmqctl list_bindings

完整命令:rabbitmqctl list_bindings [-p vhost] [bindinginfoitem ...]

????????返回綁定關(guān)系的細(xì)節(jié), 如果無[-p vhost] 參數(shù), 將顯示默認(rèn)的vhost 為"/"中的綁定關(guān)系詳情。bindinginfoitem 參數(shù)用于指示哪些信息項(xiàng)會(huì)包含在結(jié)果集中,結(jié)果集的列順序?qū)⑵ヅ鋮?shù)的順序。bindinginfoitem 可以是下面列表中的任何值。

  • source_name: 綁定中消息來源的名稱。
  • source_kind: 綁定中消息來源的類別。
  • destination_name: 綁定中消息目的地的名稱。
  • destination_kind: 綁定中消息目的地的種類。
  • routing_key: 綁定的路由鍵。
  • arguments: 綁定的參數(shù)。

????????如果沒有指定bindinginfoitem,那么將顯示所有的條目。相關(guān)示例如下:

[root@myblnp ~]# rabbitmqctl list_bindings -q
source_name     source_kind     destination_name        destination_kind        routing_key     argumentsexchange        queue.normal    queue   queue.normal    []exchange        myAe_test       queue   myAe_test       []exchange        queue_demo      queue   queue_demo      []exchange        queue.dlx       queue   queue.dlx       []exchange        queue.priority  queue   queue.priority  []
exchange.dlx    exchange        queue.dlx       queue   routingkey      []
exchange.normal exchange        queue.normal    queue           []
exchange.priority       exchange        queue.priority  queue   routingkey      []
exchange_demo   exchange        queue_demo      queue   routingKey_demo []
myAE    exchange        myAe_test       queue           []
[root@myblnp ~]# 

1.5.4、rabbìtmqctl lìst_connectìons

完整命令:rabbìtmqctl lìst_connectìons [connectìonìnfoìtem ...]

????????返回TCP/IP連接的統(tǒng)計(jì)信息。connectioninfoitem 參數(shù)用于指示哪些信息項(xiàng)會(huì)包含在結(jié)果集中,結(jié)果集的列順序?qū)⑵ヅ鋮?shù)的順序。connectioninfoitem 可以是下面列表中的任何值。

  • pid: 與連接相關(guān)的Erlang 進(jìn)程ID 。
  • name: 連接的名稱。
  • port: 服務(wù)器端口。
  • host: 返回反向DNS 獲取的服務(wù)器主機(jī)名稱,或者IP 地址,或者未啟用。
  • peer_port: 服務(wù)器對(duì)端端口。當(dāng)一個(gè)客戶端與服務(wù)器連接時(shí),這個(gè)客戶端的端口就是peer_port 。
  • peer_host: 返回反向DNS 獲取的對(duì)端主機(jī)名稱,或者IP?地址,或者未啟用。
  • ssl: 是否啟用SSL 。
  • ssl_protoco1: SSL 協(xié)議,如tlsvl 。
  • ssl_key_exchange: SSL 密鑰交換算法,如rsa 。
  • ssl_cipher: SSL 加密算法,如aes_256_cbc 。
  • ssl_hash: SSL 哈希算法,如sha
  • peer_cert_subject: 對(duì)端的SSL 安全證書的主題,基于RFC4514 的形式。
  • peer_cert_issuer: 對(duì)端SSL 安全證書的發(fā)行者, 基于RFC4514 的形式。
  • peer_cert_validity: 對(duì)端SSL 安全證書的有效期。
  • state: 連接狀態(tài),包括starting 、tuning 、opening、running 、flow 、blocking 、blocked 、closing 和closed 這幾種。
  • channels: 該連接中的信道個(gè)數(shù)。
  • protocol: 使用的AMQP 協(xié)議的版本,當(dāng)前是{0,9 , 1} 或者{0, 8 ,0} 。注意,如果客戶端請(qǐng)求的是AMQP 0-9 的連接, RabbitMQ 也會(huì)將其視為0-9-1。
  • auth_mechanism: 使用的SASL 認(rèn)證機(jī)制,如PLAIN 、AMQPLAIN 、EXTERNAL 、RABBIT-CR-DEMO 等。
  • user: 與連接相關(guān)的用戶名。
  • vhost: 與連接相關(guān)的vhost 的名稱。
  • timeout: 連接超時(shí)/協(xié)商的心跳間隔,單位為秒。
  • frame_max: 最大傳輸幀的大小,單位為B 。
  • channel_max: 此連接上信道的最大數(shù)量。如果值0 ,則表示無上限,但客戶端一般會(huì)將0 轉(zhuǎn)變?yōu)?5535 。
  • client_properties: 在建立連接期間由客戶端發(fā)送的信息屬性。
  • recv_oct: 收到的字節(jié)數(shù)。
  • recv_cnt: 收到的數(shù)據(jù)包個(gè)數(shù)。
  • send_oct: 發(fā)送的字節(jié)數(shù)。
  • send_cnt : 發(fā)送的數(shù)據(jù)包個(gè)數(shù)。
  • send_pend: 發(fā)送隊(duì)列大小。
  • connected_at : 連接建立的時(shí)間戳。

????????如果沒有指定connectioninfoitem , 那么會(huì)顯示user 、peer_host 、peer_port和state 這幾項(xiàng)信息。相關(guān)示例如下:

[root@myblnp ~]# rabbitmqctl list_connections
Listing connections ...
user    peer_host       peer_port       state
admin   192.168.56.1    50077   running
[root@myblnp ~]# rabbitmqctl list_connections pid,name,host,recv_cnt,channel_max
Listing connections ...
pid     name    host    recv_cnt        channel_max
<rabbit@myblnp.2.7093.0>        192.168.56.1:50077 -> 192.168.56.106:5672       192.168.56.106  9       2047
[root@myblnp ~]# 

1.5.5、rabbitmqctl list_ channels

完整命令:rabbitmqctl list_ channels [channelinfoitem ...]

????????返回當(dāng)前所有信道的信息。channelinfoitem 參數(shù)用于指示哪些信息項(xiàng)會(huì)包含在結(jié)果集中,結(jié)果集的列順序?qū)⑵ヅ鋮?shù)的順序。channelinfoitem 可以是下面列表中的任何值。

  • pid: 與連接相關(guān)的Erlang 進(jìn)程ID 。
  • connection : 信道所屬連接的Erlang 進(jìn)程ID 。
  • name : 信道的名稱。
  • number: 信道的序號(hào)。
  • user: 與信道相關(guān)的用戶名稱。
  • vhost : 與信道相關(guān)的vhost
  • transactional: 信道是否處于事務(wù)模式。
  • confirm : 信道是否處于publisher confirm 模式。
  • consumer_count : 信道中的消費(fèi)者的個(gè)數(shù)。
  • messages_unacknowledged: 己投遞但是還未被ack 的消息個(gè)數(shù)。
  • messages_uncommitted : 己接收但是還未提交事務(wù)的消息個(gè)數(shù)。
  • acks_uncommitted : 己ack 收到但是還未提交事務(wù)的消息個(gè)數(shù)。
  • messages_unconfirmed : 己發(fā)送但是還未確認(rèn)的消息個(gè)數(shù)。如果信道不處于publisher confmn 模式下,則此值為0 。
  • perfetch_count : 新消費(fèi)者的Qos 個(gè)數(shù)限制。0 表示無上限。
  • global_prefetch_count: 整個(gè)信道的Qos 個(gè)數(shù)限制。0 表示無上限。

????????如果沒有指定channelinfoitem ,那么會(huì)顯示pid 、user 、consumer count 和messages unacknowledged 這幾項(xiàng)信息。相關(guān)示例如下:

[root@myblnp ~]# rabbitmqctl list_channels
Listing channels ...
pid     user    consumer_count  messages_unacknowledged
<rabbit@myblnp.2.7102.0>        admin   1       0
[root@myblnp ~]# rabbitmqctl list_channels user,transactional,confirm,consumer_count
Listing channels ...
user    transactional   confirm consumer_count
admin   false   false   1
[root@myblnp ~]# 

1.5.6、rabbitmqctl list_consumers

完整命令:rabbitmqctl list_consumers [-p vhost]

????????列舉消費(fèi)者信息。每行將顯示由制表符分隔的己訂閱隊(duì)列的名稱、相關(guān)信道的進(jìn)程標(biāo)識(shí)、consumerTag 、是否需要消費(fèi)端確認(rèn)、prefetch_ count 及參數(shù)列表這些信息。相關(guān)示例如下:

[root@myblnp ~]# rabbitmqctl list_consumers
Listing consumers in vhost / ...
queue_name      channel_pid     consumer_tag    ack_required    prefetch_count  active  arguments
amq.gen-YkY491597YmmGfe0WEIxdw  <rabbit@myblnp.2.7102.0>        amq.ctag-1Zw0NLMwNGA-VeEmsDAE6g false   0       true    []
[root@myblnp ~]# 

1.5.7、rabbitmqctl status

????????顯示Broker 的狀態(tài), 比如當(dāng)前Erlang 節(jié)點(diǎn)上運(yùn)行的應(yīng)用程序、RabbitMQ/Erlang 的版本信息、os 的名稱、內(nèi)存及文件描述符等統(tǒng)計(jì)信息。

[root@myblnp ~]# rabbitmqctl status
Status of node rabbit@myblnp ...
RuntimeOS PID: 16483
OS: Linux
Uptime (seconds): 17986
Is under maintenance?: false
RabbitMQ version: 3.8.13
Node name: rabbit@myblnp
Erlang configuration: Erlang/OTP 22 [erts-10.7.2.5] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [hipe]
Erlang processes: 474 used, 1048576 limit
Scheduler run queue: 1
Cluster heartbeat timeout (net_ticktime): 60PluginsEnabled plugin file: /etc/rabbitmq/enabled_plugins
Enabled plugins:* rabbitmq_management* amqp_client* rabbitmq_web_dispatch* cowboy* cowlib* rabbitmq_management_agentData directoryNode data directory: /var/lib/rabbitmq/mnesia/rabbit@myblnp
Raft data directory: /var/lib/rabbitmq/mnesia/rabbit@myblnp/quorum/rabbit@myblnpConfig filesLog file(s)* /var/log/rabbitmq/rabbit@myblnp.log* /var/log/rabbitmq/rabbit@myblnp_upgrade.logAlarms(none)MemoryTotal memory used: 0.0878 gb
Calculation strategy: rss
Memory high watermark setting: 0.4 of available memory, computed to: 1.5893 gbcode: 0.0273 gb (30.59 %)
other_proc: 0.0238 gb (26.64 %)
allocated_unused: 0.016 gb (17.9 %)
other_system: 0.0133 gb (14.93 %)
other_ets: 0.0033 gb (3.74 %)
plugins: 0.0019 gb (2.1 %)
atom: 0.0016 gb (1.76 %)
binary: 0.0009 gb (0.98 %)
mgmt_db: 0.0003 gb (0.39 %)
queue_procs: 0.0003 gb (0.28 %)
metrics: 0.0003 gb (0.28 %)
mnesia: 0.0001 gb (0.13 %)
connection_other: 0.0001 gb (0.12 %)
msg_index: 0.0001 gb (0.07 %)
quorum_ets: 0.0 gb (0.05 %)
connection_readers: 0.0 gb (0.03 %)
connection_channels: 0.0 gb (0.01 %)
connection_writers: 0.0 gb (0.0 %)
queue_slave_procs: 0.0 gb (0.0 %)
quorum_queue_procs: 0.0 gb (0.0 %)
reserved_unallocated: 0.0 gb (0.0 %)File DescriptorsTotal: 8, limit: 32671
Sockets: 1, limit: 29401Free Disk SpaceLow free disk space watermark: 0.05 gb
Free disk space: 0.1821 gbTotalsConnection count: 1
Queue count: 6
Virtual host count: 2ListenersInterface: [::], port: 15672, protocol: http, purpose: HTTP API
Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
[root@myblnp ~]# 

1.5.8、rabbitmqctl node_health_check

????????對(duì)RabbitMQ 節(jié)點(diǎn)進(jìn)行健康檢查, 確認(rèn)應(yīng)用是否正常運(yùn)行、list_queues 和list_channels是否能夠正常返回等。相關(guān)示例如下:

[root@myblnp ~]# rabbitmqctl node_health_check
This command is DEPRECATED and will be removed in a future version.
It performs intrusive, opinionated health checks and requires a fully booted node.
Use one of the options covered in https://www.rabbitmq.com/monitoring.html#health-checks instead.
Timeout: 70 seconds ...
Checking health of node rabbit@myblnp ...
Health check passed
[root@myblnp ~]# 

1.5.9、rabbitmqctl environment

????????顯示每個(gè)運(yùn)行程序環(huán)境中每個(gè)變量的名稱和值。

[root@myblnp ~]# rabbitmqctl environment
Application environment of node rabbit@myblnp ...
[{amqp_client,[{prefer_ipv6,false},{ssl_options,[]},{writer_gc_threshold,1000000000}]},{asn1,[]},{aten,[{detection_threshold,0.99},{heartbeat_interval,100},{poll_interval,5000},{scaling_factor,1.5}]},{compiler,[]},{cowboy,[]},{cowlib,[]},{credentials_obfuscation,[{enabled,true}]},{crypto,[{fips_mode,false},{rand_cache_size,896}]},{cuttlefish,[]},{gen_batch_server,[]},{goldrush,[]},{inets,[]},{jsx,[]},{kernel,[{inet_default_connect_options,[{nodelay,true}]},{inet_dist_listen_max,25672},{inet_dist_listen_min,25672},{logger,[{handler,default,logger_std_h,#{config => #{type => standard_io},formatter =>{logger_formatter,#{legacy_header => true,single_line => false}}}}]},{logger_level,notice},{logger_sasl_compatible,false},{shutdown_func,{rabbit_prelaunch,shutdown_func}}]},{lager,[{async_threshold,20},{async_threshold_window,5},{colored,false},{colors,[{debug,"\e[0;38m"},{info,"\e[1;37m"},{notice,"\e[1;36m"},{warning,"\e[1;33m"},{error,"\e[1;31m"},{critical,"\e[1;35m"},{alert,"\e[1;44m"},{emergency,"\e[1;41m"}]},{crash_log,"log/crash.log"},{crash_log_count,5},{crash_log_date,"$D0"},{crash_log_msg_size,65536},{crash_log_rotator,lager_rotator_default},{crash_log_size,10485760},{error_logger_format_raw,true},{error_logger_hwm,500000},{error_logger_hwm_original,5000},{error_logger_redirect,true},{extra_sinks,[{rabbit_log_upgrade_lager_event,[{handlers,[{lager_file_backend,[{date,[]},{file,"/var/log/rabbitmq/rabbit@myblnp_upgrade.log"},{formatter_config,[date," ",time," ",color,"[",severity,"] ",{pid,[]}," ",message,"\n"]},{level,info},{size,0}]}]},{rabbit_handlers,[{lager_file_backend,[{date,[]},{file,"/var/log/rabbitmq/rabbit@myblnp_upgrade.log"},{formatter_config,[date," ",time," ",color,"[",severity,"] ",{pid,[]}," ",message,"\n"]},{level,info},{size,0}]}]}]},{rabbit_log_shovel_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]},{rabbit_log_ra_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]},{rabbit_log_queue_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]},{rabbit_log_prelaunch_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]},{rabbit_log_mirroring_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]},{rabbit_log_ldap_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]},{rabbit_log_federation_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]},{rabbit_log_feature_flags_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]},{rabbit_log_connection_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]},{rabbit_log_channel_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]},{rabbit_log_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]},{error_logger_lager_event,[{handlers,[{lager_forwarder_backend,[lager_event,info]}]},{rabbit_handlers,[{lager_forwarder_backend,[lager_event,info]}]}]}]},{handlers,[{lager_file_backend,[{date,[]},{file,"/var/log/rabbitmq/rabbit@myblnp.log"},{formatter_config,[date," ",time," ",color,"[",severity,"] ",{pid,[]}," ",message,"\n"]},{level,debug},{size,0}]}]},{log_root,"/var/log/rabbitmq"},{rabbit_handlers,[{lager_file_backend,[{date,[]},{file,"/var/log/rabbitmq/rabbit@myblnp.log"},{formatter_config,[date," ",time," ",color,"[",severity,"] ",{pid,[]}," ",message,"\n"]},{level,debug},{size,0}]}]}]},{mnesia,[{dir,"/var/lib/rabbitmq/mnesia/rabbit@myblnp"}]},{observer_cli,[{plugins,[]},{scheduler_usage,disable}]},{os_mon,[{start_cpu_sup,false},{start_disksup,false},{start_memsup,false},{start_os_sup,false}]},{public_key,[]},{ra,[{data_dir,"/var/lib/rabbitmq/mnesia/rabbit@myblnp/quorum"},{logger_module,rabbit_log_ra_shim},{wal_max_batch_size,4096},{wal_max_size_bytes,536870912}]},{rabbit,[{auth_backends,[rabbit_auth_backend_internal]},{auth_mechanisms,['PLAIN','AMQPLAIN']},{autocluster,[{peer_discovery_backend,rabbit_peer_discovery_classic_config}]},{autoheal_state_transition_timeout,60000},{background_gc_enabled,false},{background_gc_target_interval,60000},{backing_queue_module,rabbit_priority_queue},{channel_max,2047},{channel_operation_timeout,15000},{channel_tick_interval,60000},{cluster_keepalive_interval,10000},{cluster_nodes,{[],disc}},{cluster_partition_handling,ignore},{collect_statistics,fine},{collect_statistics_interval,5000},{config_entry_decoder,[{passphrase,undefined}]},{connection_max,infinity},{credit_flow_default_credit,{400,200}},{default_consumer_prefetch,{false,0}},{default_permissions,[<<".*">>,<<".*">>,<<".*">>]},{default_user,<<"guest">>},{default_user_tags,[administrator]},{default_vhost,<<"/">>},{delegate_count,16},{disk_free_limit,50000000},{disk_monitor_failure_retries,10},{disk_monitor_failure_retry_interval,120000},{enabled_plugins_file,"/etc/rabbitmq/enabled_plugins"},{feature_flags_file,"/var/lib/rabbitmq/mnesia/rabbit@myblnp-feature_flags"},{fhc_read_buffering,false},{fhc_write_buffering,true},{frame_max,131072},{halt_on_upgrade_failure,true},{handshake_timeout,10000},{heartbeat,60},{lager_default_file,"/var/log/rabbitmq/rabbit@myblnp.log"},{lager_log_root,"/var/log/rabbitmq"},{lager_upgrade_file,"/var/log/rabbitmq/rabbit@myblnp_upgrade.log"},{lazy_queue_explicit_gc_run_operation_threshold,1000},{log,[{file,[{file,"/var/log/rabbitmq/rabbit@myblnp.log"}]},{categories,[{upgrade,[{file,"/var/log/rabbitmq/rabbit@myblnp_upgrade.log"}]}]}]},{loopback_users,[<<"guest">>]},{max_message_size,134217728},{memory_monitor_interval,2500},{mirroring_flow_control,true},{mirroring_sync_batch_size,4096},{mnesia_table_loading_retry_limit,10},{mnesia_table_loading_retry_timeout,30000},{msg_store_credit_disc_bound,{4000,800}},{msg_store_file_size_limit,16777216},{msg_store_index_module,rabbit_msg_store_ets_index},{msg_store_io_batch_size,4096},{msg_store_shutdown_timeout,600000},{num_ssl_acceptors,10},{num_tcp_acceptors,10},{password_hashing_module,rabbit_password_hashing_sha256},{plugins_dir,"/usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.13/plugins"},{plugins_expand_dir,"/var/lib/rabbitmq/mnesia/rabbit@myblnp-plugins-expand"},{proxy_protocol,false},{queue_explicit_gc_run_operation_threshold,1000},{queue_index_embed_msgs_below,4096},{queue_index_max_journal_entries,32768},{quorum_cluster_size,3},{quorum_commands_soft_limit,32},{reverse_dns_lookups,false},{server_properties,[]},{ssl_allow_poodle_attack,false},{ssl_apps,[asn1,crypto,public_key,ssl]},{ssl_cert_login_from,distinguished_name},{ssl_handshake_timeout,5000},{ssl_listeners,[]},{ssl_options,[]},{tcp_listen_options,[{backlog,128},{nodelay,true},{linger,{true,0}},{exit_on_close,false}]},{tcp_listeners,[{"auto",5672}]},{trace_vhosts,[]},{track_auth_attempt_source,false},{tracking_execution_timeout,15000},{vhost_restart_strategy,continue},{vm_memory_calculation_strategy,rss},{vm_memory_high_watermark,0.4},{vm_memory_high_watermark_paging_ratio,0.5},{writer_gc_threshold,1000000000}]},{rabbit_common,[]},{rabbitmq_management,[{content_security_policy,"script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'"},{cors_allow_origins,[]},{cors_max_age,1800},{http_log_dir,none},{load_definitions,none},{management_db_cache_multiplier,5},{process_stats_gc_timeout,300000},{stats_event_max_backlog,250}]},{rabbitmq_management_agent,[{rates_mode,basic},{sample_retention_policies,[{global,[{605,5},{3660,60},{29400,600},{86400,1800}]},{basic,[{605,5},{3600,60}]},{detailed,[{605,5}]}]}]},{rabbitmq_prelaunch,[]},{rabbitmq_web_dispatch,[]},{ranch,[]},{recon,[]},{sasl,[{errlog_type,error},{sasl_error_logger,false}]},{ssl,[]},{stdlib,[]},{stdout_formatter,[]},{syntax_tools,[]},{sysmon_handler,[{busy_dist_port,true},{busy_port,false},{gc_ms_limit,0},{heap_word_limit,0},{port_limit,100},{process_limit,100},{schedule_ms_limit,0}]},{tools,[{file_util_search_methods,[{[],[]},{"ebin","esrc"},{"ebin","src"}]}]},{xmerl,[]}]
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl environment --formatter=json

1.5.10、rabbitmqctl report

????????為所有服務(wù)器狀態(tài)生成一個(gè)服務(wù)器狀態(tài)報(bào)告,井將輸出重定向到一個(gè)文件。相關(guān)示例如下:

[root@myblnp ~]# rabbitmqctl report > report.txt
[root@myblnp ~]# ls
anaconda-ks.cfg  arthas  logs  mayfly  report.txt  rubbish  soft
[root@myblnp ~]# cat report.txt 
Reporting server status of node rabbit@myblnp ...Status of node rabbit@myblnp ...
RuntimeOS PID: 16483
OS: Linux
Uptime (seconds): 19850
Is under maintenance?: false
RabbitMQ version: 3.8.13……exchange.normal exchange        queue.normal    queue           []
exchange.priority       exchange        queue.priority  queue   routingkey      []
exchange_demo   exchange        queue_demo      queue   routingKey_demo []
myAE    exchange        myAe_test       queue           []Listing permissions for vhost "/" ...
user    configure       write   read
admin   .*      .*      .*
guest   .*      .*      .*Listing policies for vhost "/" ...
vhost   name    pattern apply-to        definition      priority
/       AE2     ^exchange_demo$ all     {"alternate-exchange":"myAE"}   0Listing global runtime parameters ...
name    value
cluster_name    "myblnps"
internal_cluster_id     "rabbitmq-cluster-id-jpA-C8h6S2NRi300jibXlQ"Listing runtime parameters for vhost "/" ...[root@myblnp ~]# 

1.5.11、rabbitmqctl eval {expr}

????????執(zhí)行任意Erlang 表達(dá)式。相關(guān)示例如下(示例命令用于返回rabbitmqctl 連接的節(jié)點(diǎn)名稱) :

[root@myblnp ~]# rabbitmqctl eval 'node().'
rabbit@myblnp
[root@myblnp ~]# 

1.6、eval 的擴(kuò)展

????????用戶、Parameter 、vhost、權(quán)限等都可以通過rabbitmqctl 工具來完成創(chuàng)建(或刪除)的操作,反觀交換器、隊(duì)列及綁定關(guān)系的創(chuàng)建(或刪除)操作并無相應(yīng)的rabbitmqctl 工具類的命令,到目前為止介紹的只有通過客戶端或者Web 管理界面來完成,這對(duì)于 CLI?的使用愛好者來說無疑是一種遺憾。

? ? ? ? 實(shí)際上可以通過?rabbitmqctl eval {expr} 以"曲線救國"的形式實(shí)現(xiàn)通過 rabbitmqctl 工具來創(chuàng)建交換器、隊(duì)列及綁定關(guān)系。執(zhí)行下面三條命令就可以創(chuàng)建一個(gè)交換器exchange2 、一個(gè)隊(duì)列queue2 并通過綁定鍵rk2進(jìn)行綁定。

#反饋錯(cuò)誤(創(chuàng)建交換機(jī))
[root@myblnp ~]# rabbitmqctl eval 'rabbit_exchange:declare({resource , << "/" >> , exchange , << "exchange2">>} , direct , true , false , false , []).'
Error:
{:undef, [{:rabbit_exchange, :declare, [{:resource, "/", :exchange, "exchange2"}, :direct, true, false, false, []], []}, {:erl_eval, :do_apply, 6, [file: 'erl_eval.erl', line: 680]}, {:rpc, :"-handle_call_call/6-fun-0-", 5, [file: 'rpc.erl', line: 197]}]}#正確示例(創(chuàng)建交換機(jī))
[root@myblnp ~]# rabbitmqctl eval 'rabbit_exchange:declare({resource , << "/" >> , exchange , << "exchange2">>} , direct , true , false , false , [],<<"admin">>).'
{exchange,{resource,<<"/">>,exchange,<<"exchange2">>},direct,true,false,false,[],undefined,undefined,undefined,{[],[]},#{user => <<"admin">>}}
[root@myblnp ~]# 

上面的示例里,第一次執(zhí)行失敗了返回對(duì)應(yīng)的錯(cuò)誤信息。這是因?yàn)槲沂褂玫膔abbitmq版本是“3.8.13”版本,在低于3.7.0版本的使用這條命令是可以正常執(zhí)行的。高于這個(gè)版本需要添加參數(shù)【<<"admin">>】代理用戶,否則會(huì)出現(xiàn)上述錯(cuò)誤。

#創(chuàng)建隊(duì)列
[root@myblnp ~]# rabbitmqctl eval 'rabbit_amqqueue:declare({resource,<<"/">>,queue,<<"queue2">>},true,false,[],none,<<"admin">>).'
{new,{amqqueue,{resource,<<"/">>,queue,<<"queue2">>},true,false,none,[],<11270.9012.0>,[],[],[],undefined,undefined,[],[],live,0,[],<<"/">>,#{user => <<"admin">>},rabbit_classic_queue,#{}}}
[root@myblnp ~]# #綁定隊(duì)列到指定交換機(jī)并指定路由key
[root@myblnp ~]# rabbitmqctl eval 'rabbit_binding:add({binding,{resource,<<"/">>,exchange,<<"exchange2">>},<<"rk2">>,{resource,<<"/">>,queue,<<"queue2">>},[]},<<"admin">>).'
ok
[root@myblnp ~]# 

????????其實(shí)這里是調(diào)用了Erlang 中對(duì)應(yīng)模塊的相應(yīng)函數(shù),語法類似"Module:Function(Arg) ."。對(duì)于交換器的創(chuàng)建,則調(diào)用了rabbit_exchange 模塊的declare 函數(shù), 該函數(shù)具體聲明為:

#尤為注意這個(gè)“.”,缺少了是不完整的并且無法執(zhí)行
declare(XName , Type , Durable , AutoDelete , Internal , Args) .

????????不同的RabbitMQ 版本參數(shù)會(huì)略有差異,比如高版本會(huì)多個(gè)Username 參數(shù),采用上面的定義可以在多個(gè)當(dāng)前主流版本中創(chuàng)建交換器。對(duì)應(yīng)的參數(shù)如下所述。

  • XName : 交換器的命名細(xì)節(jié),具體格式為{resource , VHost , exchange , Name} 。VHost 為虛擬主機(jī)的名稱, Name 為交換器的名稱。注意VHost 和Name 需要以"<<>> "包裹,標(biāo)注為binary 類型。
  • Type : 交換器的類型,可選值為direct 、headers 、topic 和fanout
  • Durable : 是否需要持久化。
  • AutoDelete : 是否自動(dòng)刪除。
  • Internal: 是否是內(nèi)置的交換器。
  • Args: 交換器的其他選項(xiàng)參數(shù), 一般設(shè)置為[]。

????????與創(chuàng)建交換器對(duì)應(yīng)的刪除操作為調(diào)用rabbit_exchange 模塊的delete 函數(shù),示例如下:

[root@myblnp ~]# rabbitmqctl eval 'rabbit_exchange:delete({resource,<<"/">>,exchange,<<"exchange2">>},false,<<"admin">>).'
ok
[root@myblnp ~]# 

????????對(duì)于隊(duì)列的創(chuàng)建,則調(diào)用了rabbit_amqqueue 模塊的declare 函數(shù), 該函數(shù)具體聲明為:

declare(QueueName , Durable , AutoDelete , Args , Owner).

????????不同的RabbitMQ 版本參數(shù)會(huì)略有差異,比如高版本會(huì)多一個(gè)ActingUser 參數(shù),采用上面的定義可以在多個(gè)當(dāng)前主流版本中創(chuàng)建交換器。對(duì)應(yīng)的參數(shù)如下所述。

  • QueueName : 隊(duì)列的命名細(xì)節(jié), 具體格式為{resource , VHost , queue , Name} 。VHost 為虛擬主機(jī)的名稱, Name 為交換器的名稱。注意VHost 和Name 需要以"<<>> "包裹,標(biāo)注為binary 類型。
  • Durable: 是否需要持久化。
  • AutoDelete : 是否自動(dòng)刪除。
  • Args: 隊(duì)列的其他選項(xiàng)參數(shù), 一般設(shè)置為[] 。
  • Owner : 用于隊(duì)列的獨(dú)占模式, 一般設(shè)置為none 。

????????與創(chuàng)建隊(duì)列對(duì)應(yīng)的刪除操作為調(diào)用rabbit_amqqueue 模塊的internal_delete 函數(shù),示例如下:

[root@myblnp ~]# rabbitmqctl eval 'rabbit_amqqueue:internal_delete({resource, <<"/">>,queue, <<"queue2">>},<<"admin">>).'
ok
[root@myblnp ~]# 

????????與創(chuàng)建綁定關(guān)系對(duì)應(yīng)的解綁操作為調(diào)用rabbit_binding 模塊的remove 函數(shù), 示例如下:

rabbitmqctl eval 'rabbit_binding:remove({binding, {resource, <<"/">>,exchange, <<"exchange2">>},<<"rk2">>,{resource,<<"/">>,queue,<<"queue2">>},[],<<"admin">>}).'
ok

技巧:若要?jiǎng)h除所有的交換器、隊(duì)要IJ 及綁定關(guān)系,刪除對(duì)應(yīng)的vhost 就可以"一鍵搞定",而不需要一個(gè)個(gè)邊歷刪除。

1.7、HTTP API接口管理

????????RabbitMQ Management 插件不僅提供了Web 管理界面, 還提供了HTTPAPI 接口來方便調(diào)用。比如創(chuàng)建一個(gè)隊(duì)列,就可以通過PUT 方法調(diào)用/api/queues/vhost/{name} 接口來實(shí)現(xiàn)。下面的示例通過curl?命令調(diào)用接口來完成隊(duì)列queue 的創(chuàng)建:

[root@myblnp ~]# curl -i -u admin:admin@123 -H "content-type:application/json" -XPUT -d '{"auto_delete":false,"durable":true,"node":"rabbit@myblnp"}' http://192.168.56.106:15672/api/queues/%2F/queue
HTTP/1.1 201 Created
content-length: 0
content-security-policy: script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'
date: Tue, 12 Sep 2023 09:29:22 GMT
server: Cowboy
vary: accept, accept-encoding, origin[root@myblnp ~]# 

????????注意上面命令中的"%2F" 是指默認(rèn)的vhost,即" / ", 這類特殊字符在HTTPURL 中是需要轉(zhuǎn)義的。這里的curl?命令又為創(chuàng)建( 或刪除)交換器、隊(duì)列及綁定關(guān)系提供了另一種CLI的實(shí)現(xiàn)方式。所有的HTTPAPI 接口都需要HTTP 基礎(chǔ)認(rèn)證(使用標(biāo)準(zhǔn)的RabbitMQ 用戶數(shù)據(jù)庫),默認(rèn)的是guest/guest 。?非localhost 的不能使用這組認(rèn)證,除非特殊設(shè)置)。

????????這里的HTTPAPI 是完全基于RESTFUL 風(fēng)格的, 不同的HTTPAPI 接口所對(duì)應(yīng)的HTTP 方法各不相同, 這里一共涉及4 種HTTP 方法: GET, PUT 、DELETE 和POST。?GET 方法一般用來獲取如集群、節(jié)點(diǎn)、隊(duì)列、交換器等信息。PUT 方法用來創(chuàng)建資源, 如交換器、隊(duì)列之類的。DELETE 方法用來刪除資源。POST 方法也是用來創(chuàng)建資源的,與PUT 不同的是, POST 創(chuàng)建的是無法用具體名稱的資源。比如綁定關(guān)系C bindings) 和發(fā)布消息C publish ) 無法指定一個(gè)具體的名稱。下面示例展示了通過GET 方法來獲取之前創(chuàng)建的隊(duì)列queue 的信息:

[root@myblnp ~]# curl -i -u admin:admin@123 -XGET http://192.168.56.106:15672/api/queues/%2F/queue
HTTP/1.1 200 OK
cache-control: no-cache
content-length: 1406
content-security-policy: script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'
content-type: application/json
date: Wed, 13 Sep 2023 08:34:30 GMT
server: Cowboy
vary: accept, accept-encoding, origin{"consumer_details":[],"arguments":{},"auto_delete":false,"backing_queue_status":{"avg_ack_egress_rate":0.0,"avg_ack_ingress_rate":0.0,"avg_egress_rate":0.0,"avg_ingress_rate":0.0,"delta":["delta","undefined",0,0,"undefined"],"len":0,"mode":"default","next_seq_id":0,"q1":0,"q2":0,"q3":0,"q4":0,"target_ram_count":"infinity"},"consumer_capacity":0,"consumer_utilisation":0,"consumers":0,"deliveries":[],"durable":true,"effective_policy_definition":{},"exclusive":false,"exclusive_consumer_tag":null,"garbage_collection":{"fullsweep_after":65535,"max_heap_size":0,"min_bin_vheap_size":46422,"min_heap_size":233,"minor_gcs":696},"head_message_timestamp":null,"idle_since":"2023-09-13 8:33:03","incoming":[],"memory":13204,"message_bytes":0,"message_bytes_paged_out":0,"message_bytes_persistent":0,"message_bytes_ram":0,"message_bytes_ready":0,"message_bytes_unacknowledged":0,"messages":0,"messages_details":{"rate":0.0},"messages_paged_out":0,"messages_persistent":0,"messages_ram":0,"messages_ready":0,"messages_ready_details":{"rate":0.0},"messages_ready_ram":0,"messages_unacknowledged":0,"messages_unacknowledged_details":{"rate":0.0},"messages_unacknowledged_ram":0,"name":"queue","node":"rabbit@myblnp","operator_policy":null,"policy":null,"recoverable_slaves":null,"reductions":856668,"reductions_details":{"rate":0.0},"single_active_consumer_tag":null,"state":"running","type":"classic","vhost":"/"}[root@myblnp ~]# 
[root@myblnp ~]#

以下是關(guān)于RabbitMQ的所有http接口,以及接口的具體用途含義

GETPUTDELETEPOSTPATH & Description
?/api/overview 描述整個(gè)系統(tǒng)的各種信息
??/api/cluster-name 集群的名稱
?/api/nodes 集群中節(jié)點(diǎn)的信息
?/api/nodes/name 集群中單個(gè)節(jié)點(diǎn)的信息
?/api/extensions 管理插件的擴(kuò)展列表
??/api/definitions GET方法列出集群中所有的元數(shù)據(jù)信息,包括交換器、隊(duì)列、綁定關(guān)系、用戶、vhost、權(quán)限及參數(shù)。POST方法用來加載新的元數(shù)據(jù)信息,但是有以下注意事項(xiàng): (1)、新的元數(shù)據(jù)信息會(huì)與原本的合并,如果舊的元數(shù)據(jù)信息中某些項(xiàng)在新加載的元數(shù)據(jù)中沒有定義,則不受影響。 (2)、對(duì)于交換器、隊(duì)列及綁定關(guān)系等不可變的內(nèi)容,如果新舊元數(shù)據(jù)有沖突,則反饋錯(cuò)誤 (3)、對(duì)于其他可變的內(nèi)容,如果新舊元數(shù)據(jù)有沖突,則新的會(huì)替換舊的 (4)、如果在加載過程中發(fā)生錯(cuò)誤,加載過程會(huì)停止,最終只能加載到那部分新的元數(shù)據(jù)信息
??/api/definitions/{vhost} 將【/api/definitions】接口的數(shù)據(jù)細(xì)化到 vhost 級(jí)別
?/api/connections 所有的連接信息
??/api/connections/{name} GET:方法可以列出指定連接的信息 DELETE:方法可以 close 指定的連接
?/api/connections/{name}/channels 指定連接的所有信道消息
?/api/channels 所有信息的信息
?/api/vhosts/{vhost}/channels 查看指定 vhost 中的所有信道信息
?/api/channels/{channel} 查看指定信道的信息
?/api/consumers 查看所有的消費(fèi)者信息
?/api/consumers/{vhost} 查看指定 vhost 的所有消費(fèi)者
?/api/exchanges 查看所有的交換器信息
?/api/exchanges/{vhost} 查看指定 vhost 的所有交換器信息
???/api/exchanges/{vhost}/{name} GET:方法列出一個(gè)指定交換器的信息 PUT:可以聲明一個(gè)新的交換器,對(duì)應(yīng)的內(nèi)容可以參考如下:{"type": "direct","auto_delete": false,"internal": false,"durable": true,"arguments": {}} 其中type是必須的,其他是可選的。 DELETE:方法可以刪除指定的交換器,其中可以加入 if-unused=true 參數(shù)用來防止有隊(duì)列與其綁定時(shí)能夠被刪除
?/api/exchanges/vhost/{name}/bindings/source 列出指定交換器的所有綁定關(guān)系,此交換器需為綁定關(guān)系的源端
?/api/exchanges/vhost/{name}/bindings/destination 列出指定交換器的所有綁定關(guān)系,此交換器需為綁定關(guān)系的目的端
?/api/exchanges/vhost/{name}/publish 向指定的交換器中發(fā)生一條消息,對(duì)應(yīng)的內(nèi)容可以參考:{"properties": {},"routing_key": "myKey","payload": "myBody","payload_encoding": "string"} 這里面的所有參數(shù)項(xiàng)都是必填的,如果發(fā)生成功則會(huì)返回:{"routed": true} 這個(gè)接口不適合做穩(wěn)定、高效的發(fā)送使用,可以采用其他的方式比如通過 AMQP 協(xié)議或者其他長連接的協(xié)議
?/api/queues 列出所有的隊(duì)列信息
?/api/queues/{vhost} 列出指定 vhost 下的所有隊(duì)列信息
???/api/queues/{vhost}/{name} GET:方法列出執(zhí)行的隊(duì)列信息 PUT:可以聲明一個(gè)隊(duì)列,對(duì)應(yīng)的內(nèi)容可以參考:{"auto_delete": false,"durable": true,"arguments": {},"node": "rabbit@myblnp"} 這里的所有參數(shù)都是可選的 DELETE:可以用來刪除一個(gè)隊(duì)列,當(dāng)然還可以指定 if-empty=true 或者 if-unused=true 等參數(shù)
?/api/queues/{vhost}/{name}/bindings 列出指定交換器下指定隊(duì)列的所有綁定關(guān)系
?/api/queues/{vhost}/{name}/contents 清空(purge)指定的隊(duì)列
?/api/queues/{vhost}/{name}/actions 對(duì)指定的隊(duì)列附加一些動(dòng)作,對(duì)應(yīng)的內(nèi)容可參考:{"action": "sync"} 目前僅支持 sync 和 cancel_sync
?/api/queues/{vhost}/{name}/get 從指定的隊(duì)列中獲取消息,對(duì)應(yīng)的內(nèi)容參數(shù)可參考:{"count": 5,"requeue": true,"encoding": "auto","truncate": 50000} count:表示最大能獲取的消息個(gè)數(shù),實(shí)際可能小于這個(gè)數(shù);requeue:表示獲取到這些消息時(shí)是否從隊(duì)列中刪除,如果 requeue 為 true,則消息不會(huì)刪除,但是消息的 redelivered 標(biāo)識(shí)會(huì)被設(shè)置;ecoding:表示編碼格式,有兩種取值,分別是 auto 和 base64,auto 指如果消息符合 UTF-8 格式則返回 string類型,否則為 base64類型;truncate:表示如果消息的payload超過指定大小則會(huì)被截?cái)?。使用該接口時(shí),除了 trucate 參數(shù),其他的都是必填的
?/api/bindings 列出所有的綁定關(guān)系
?/api/bindings/{vhost} 列出指定交換器下的所有綁定關(guān)系信息
??/api/bindings/{vhost}/e/{exchange}/q/{name} GET:列出一個(gè)指定交換器和指定隊(duì)列的所有綁定關(guān)系信息 POST:用來添加綁定關(guān)系,對(duì)應(yīng)的請(qǐng)求參數(shù)為:{"routing_key": "my_rout","arguments": {}} 這里的參數(shù)都是可選的
??/api/bindings/{vhost}/e/{exchange}/q/{name}/{props} GET:列出一個(gè)交換器和隊(duì)列的單獨(dú)的綁定關(guān)系信息 DELETE:用來解綁相應(yīng)的綁定關(guān)系信息,其中 props 表示的是 /api/bindings 返回的綁定關(guān)系列表里的 properties_key 值,具體是指綁定時(shí) routingkey 和 arguments 的哈希值的組合,一般 arguments 為空,此時(shí) properties_key 等于 routingkey
??/api/bindings/{vhost}/e/{sourceExchange}/e/{destExchange} GET:用來列出兩個(gè)交換器的所有綁定關(guān)系信息 POST:用來添加綁定關(guān)系
??/api/bindings/{vhost}/e/{sourceExchange}/e/{destExchange}/{props} 與接口 /api/bindings/{vhost}/e/{exchange}/q/{name}/{props} 相似,只是查詢的是兩個(gè)交換器之間的綁定關(guān)系
?/api/vhosts 列出所有的 vhost 信息
???/api/vhosts/{name} GET:列出指定 vhost 的信息 PUT:用來添加一個(gè) vhost ,host 通常只有一個(gè)名字,所以不需要任何其他參數(shù) DELETE:則是用來刪除指定的 vhost
?/api/vhosts/{name}/permissions 列出指定 vhost 的所有權(quán)限信息
?/api/users 列出所有的用戶信息
???/api/users/{name} GET:列出指定用戶的信息 POST:用來添加一個(gè)用戶,對(duì)應(yīng)的請(qǐng)求參數(shù)是:{"password": "pwd","tags": "administrator"} 或者 {password_hash": "2ewtgd5hdryry5ryftu=","tags": "administrators"} 其中 tags 是必須的參數(shù),用來標(biāo)識(shí)當(dāng)前用戶的角色。對(duì)于密碼字段,可以二選一的方式。如果密碼字段設(shè)置為:password_hash 為 "" 則表示用戶可以無密碼登錄 DELETE:用來刪除指定的用戶
?/api/users/{user}/permissions 用來獲取指定用戶的所有權(quán)限
?/api/whoami 顯示當(dāng)前的登錄用戶
?/api/permissions 列出所有用戶的所有權(quán)限
???/api/permissions/{vhost}/{user} GET:列出指定用戶的權(quán)限 PUT:添加指定的權(quán)限,對(duì)應(yīng)請(qǐng)求參數(shù)是:{"configure": ".","write": ".","read": ".*"} 所有參數(shù)都是必填的 DELETE:刪除指定用戶的權(quán)限
?/api/parameters 列出所有 vhost 級(jí)別的 Parameter。
?/api/parameters/component 列出指定的組件,比如 federation-upstream、shovel 等的所有 vhost 級(jí)別的 Parameter
???/api/parameters/component/{vhost}/{name} GET:列出一個(gè)指定的 vhost 級(jí)別的Parameter PUT:設(shè)置一個(gè) Parameter ,對(duì)應(yīng)的內(nèi)容參數(shù)為:{"vhost": "/","component": "federation","name": "local_username","value": "guest"} DELETE:用來刪除指定的 vhost 級(jí)別的 Parameter
?/api/global-parameters 列出所有 global 級(jí)別的Parameter
???/api/global-parameters/{name} GET:列出一個(gè)指定的 global 級(jí)別的Parameter PUT:用來新增一個(gè) global 級(jí)別的 Parameter,對(duì)應(yīng)請(qǐng)求參數(shù)為:{"name": "user_vhost","valuse": {"guest": "/", "rabbit": "warren"}} DELETE:用來刪除一個(gè)指定的 global 級(jí)別的parameter
?/api/policies 列出所有的policy
?/api/policies/{vhost} 列出指定vhost下的所有policy
???/api/policies/{vhost}/{name} GET:列出指定的policy PUT:用來設(shè)置一個(gè) policy,對(duì)應(yīng)的請(qǐng)求參數(shù)為:{"pattern": "^amq.","definition": {"federation-upstream-set": "all"},"priority":0,"apply-to": "all"} 其中,pattern 和 definition是必填參數(shù),其余可選 DELETE:用來刪除一個(gè)指定的policy
?/api/aliveness-test/{vhost} 聲明一個(gè)隊(duì)列。并在基礎(chǔ)上生產(chǎn)和消費(fèi)一條消息,用來測(cè)試系統(tǒng)是否運(yùn)行完好。這個(gè)接口可以方便一些監(jiān)控工具接入(如:Zabbix)的調(diào)用。如果系統(tǒng)運(yùn)行完好,則調(diào)用會(huì)返回 {"status": "ok"} 狀態(tài)碼為 200
?/api/healthchecks/node 對(duì)當(dāng)前節(jié)點(diǎn)進(jìn)行基本的健康檢查,包括 rabbitmq 應(yīng)用、信道、隊(duì)列是否正常運(yùn)行且無告警,如果一切正常則接口返回: {"status": "ok"} 反之則返回: {"status": "failed","reason": "string"} 不管正常與否,狀態(tài)碼都是 200
?/api/healthchecks/node/{node} 對(duì)指定節(jié)點(diǎn)進(jìn)行基本的健康檢查

????????HTTPAPI 接口通常用來方便客戶端的調(diào)用,如果單純地使用curl 的方式來調(diào)用,rabbitmqadrnin 會(huì)顯得更加方便。rabbitmqadrnin 也是RabbitMQ Management 插件提供的功能,它會(huì)包裝HTTPAPI 接口,使其調(diào)用顯得更加簡潔方便。比如前面的創(chuàng)建、顯示和刪除隊(duì)列queue 就可以這么做:

特別說明:默認(rèn)情況下 “rabbitmqadmin” 指令是無法使用的,需要啟用 RabbitMQ Management 插件,并且做一定配置后才能使用。具體配置方式可參考下面的說明。

第一步:下載插件

[root@myblnp rabbitmq_server-3.8.16]# wget http://192.168.56.106:15672/cli/rabbitmqadmin

第二步:移動(dòng)至PATH目錄并授權(quán)

[root@myblnp rabbitmq_server-3.8.16]# mv rabbitmqadmin /usr/local/bin/
[root@myblnp rabbitmq_server-3.8.16]#
[root@myblnp rabbitmq_server-3.8.16]# chmod +x /usr/local/bin/rabbitmqadmin

第三步:使用命令

[root@myblnp rabbitmq_server-3.8.16]# rabbitmqadmin list queues
+----------------+----------+
|      name      | messages |
+----------------+----------+
| myAe_test      | 0        |
| queue          | 0        |
| queue.dlx      | 1        |
| queue.normal   | 0        |
| queue.priority | 1        |
| queue_demo     | 0        |
+----------------+----------+
[root@myblnp rabbitmq_server-3.8.16]#

接上文的示例操作,如下代碼:

[root@myblnp ~]# rabbitmqadmin -u admin -p admin@123 declare queue name=rabbitadminQueue
queue declared
[root@myblnp ~]# rabbitmqadmin list queues
+------------------+----------+
|       name       | messages |
+------------------+----------+
| myAe_test        | 0        |
| queue            | 0        |
| queue.dlx        | 1        |
| queue.normal     | 0        |
| queue.priority   | 1        |
| queue_demo       | 0        |
| rabbitadminQueue | 0        |
+------------------+----------+
[root@myblnp ~]# rabbitmqadmin -u admin -p admin@123 delete queue name=rabbitadminQueue
queue deleted
[root@myblnp ~]# rabbitmqadmin list queues
+----------------+----------+
|      name      | messages |
+----------------+----------+
| myAe_test      | 0        |
| queue          | 0        |
| queue.dlx      | 1        |
| queue.normal   | 0        |
| queue.priority | 1        |
| queue_demo     | 0        |
+----------------+----------+
[root@myblnp ~]# 

以下表格是關(guān)于 rabbitmqadmin 的一些常用命令說明

命令解釋
rabbitmqadmin list users查看所有用戶 User
rabbitmqadmin list users name查看所有用戶名 Username
rabbitmqadmin list users tags查看所有用戶角色
rabbitmqadmin list vhosts查看所有虛擬主機(jī)
rabbitmqadmin list connections查看所有連接
rabbitmqadmin list exchanges查看所有路由 Exchange
rabbitmqadmin list bindings查看所有路由與隊(duì)列的關(guān)系綁定 Binding
rabbitmqadmin list permissions查看所有角色的權(quán)限 Permission
rabbitmqadmin list channels查看所有通道 Channel
rabbitmqadmin list consumers查看所有消費(fèi)者 Consumer
rabbitmqadmin list queues查看所有消息隊(duì)列 Queue
rabbitmqadmin list nodes查看所有節(jié)點(diǎn) Node
rabbitmqadmin show overview概覽 Overview
rabbitmqadmin list bindings source destination_type destination properties_key查看所有路由與隊(duì)列的關(guān)系綁定的詳細(xì)信息 Binding
rabbitmqadmin declare queue name=test durable=true定義一個(gè)隊(duì)列queue,durable=true代表持久化打開。
rabbitmqadmin declare exchange name=my.fanout type=fanout定義一個(gè)Fanout路由
rabbitmqadmin declare exchange name=my.direct type=direct定義一個(gè)Direct路由
rabbitmqadmin declare exchange name=my.topic type=topic定義一個(gè)Topic路由
rabbitmqadmin declare binding source=my.fanout destination=test routing_key=first定義 binding
rabbitmqadmin publish routing_key=test payload="hello world"發(fā)布一條消息
rabbitmqadmin publish routing_key=my.test exchange=my.topic payload="hello world"使用路由轉(zhuǎn)發(fā)消息
rabbitmqadmin get queue=test requeue=true查看消息,不消費(fèi)
rabbitmqadmin get queue=test requeue=false查看消息,并消費(fèi)
rabbitmqadmin purge queue name=test刪除隊(duì)列中的所有消息
rabbitmqadmin delete queue name=hello刪除消息隊(duì)列 Queue
rabbitmqadmin delete user name=test刪除用戶 User
rabbitmqadmin delete exchange name=test刪除路由器 Exchange
rabbitmqadmin delete binding source='kk' destination_type=queue destination=test properties_key=test刪除路由器與消息隊(duì)列的關(guān)系綁定 Binding
rabbitmqadmin -f raw_json list usersraw_json 格式化輸出
rabbitmqadmin -f long list users格式化輸出
rabbitmqadmin -f pretty_json list userspretty_json 格式化輸出
rabbitmqadmin -f kvp list users格式化輸出
rabbitmqadmin -f tsv list users格式化輸出
rabbitmqadmin -f table list userstable 格式化輸出
rabbitmqadmin -f bash list usersbash 格式化輸出

2、RabbitMQ 配置

????????一般情況下,可以使用默認(rèn)的內(nèi)建配直未有效地運(yùn)行RabbitMQ ,并且大多數(shù)情況下也并不需要修改任何RabbitMQ 的配直. 當(dāng)然,為了更加有效地操控RabbitMQ ,也可以利用調(diào)節(jié)系統(tǒng)范圍內(nèi)的參數(shù)來達(dá)到定制化的需求。RabbitMQ 提供了三種方式來定制化服務(wù):

  1. 環(huán)境變量( Enviroment Variables). RabbitMQ 服務(wù)端參數(shù)可以通過環(huán)境變量進(jìn)行配直,例如,節(jié)點(diǎn)名稱、RabbitMQ 配直文件的地址、節(jié)點(diǎn)內(nèi)部通信端口等。
  2. 配置文件(Configuration File) . 可以定義RabbitMQ 服務(wù)和插件設(shè)直,例如, TCP 監(jiān)聽端口,以及其他網(wǎng)絡(luò)相關(guān)的設(shè)直、內(nèi)存限制、磁盤限制等。
  3. 運(yùn)行時(shí)參數(shù)和策略( Runtime Parameters and Policies )??梢栽谶\(yùn)行時(shí)定義集群層面的服務(wù)設(shè)置

2.1、環(huán)境變量

????????RabbitMQ 的環(huán)境變量都是以"RABBITMQ_" 開頭的,可以在Shell 環(huán)境中設(shè)置,也可以在rabbitmq-env.conf 這個(gè)RabbitMQ 環(huán)境變量的定義文件中設(shè)置。如果是在非Shell 環(huán)境中配置,則需要將"RABBITMQ_"這個(gè)前綴去除。優(yōu)先級(jí)順序按照Shell 環(huán)境最優(yōu)先,其次rabbitmq-env.conf 配置文件,最后是默認(rèn)的配置。

????????當(dāng)采用rabbitmq-server -detached 啟動(dòng)RabbitMQ 服務(wù)的時(shí)候,此服務(wù)節(jié)點(diǎn)默認(rèn)以"rabbit@" 加上當(dāng)前的Shell 環(huán)境的hostname (主機(jī)名)來命名,即rabbit@$HOSTNAME 。參考下面,當(dāng)前Shell 環(huán)境的hostname 為" myblnp " 。

[root@myblnp ~]# hostname
myblnp
[root@myblnp ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@myblnp ...
BasicsCluster name: myblnpsDisk Nodesrabbit@myblnpRunning Nodesrabbit@myblnpVersionsrabbit@myblnp: RabbitMQ 3.8.13 on Erlang 22.3.4.12Maintenance statusNode: rabbit@myblnp, status: not under maintenanceAlarms(none)Network Partitions……

????????如果需要制定節(jié)點(diǎn)的名稱,而不是采用默認(rèn)的方式,可以在rabbitmq-s erver 命令前添加RABBITMQ_NODENAME 變量來設(shè)定指定的名稱。如下所示, 此時(shí)創(chuàng)建的節(jié)點(diǎn)名稱為" rabbit@node2 "而非"rabbit@myblnp"。

[root@myblnp ~]# RABBITMQ_NOOENAME=rabbit@node2 rabbitmq-server -detached
Warning: PIO file not written; -detached was passed.
[root@myblnp ~]# 

注意要點(diǎn):如果先執(zhí)行RABBITMQ NODENAME=rabbit@nodel ,再執(zhí)行rabbitmq-server -detached 命令,相當(dāng)于只執(zhí)行rabb 工tmq-server -detached 命令, 即對(duì)RABBITMQ NODENAME 的定義無效。

????????以RABBITMQ_NODENAME 這個(gè)變量為例, RabbitMQ 在啟動(dòng)服務(wù)的時(shí)候首先判斷當(dāng)前Shell 環(huán)境中有無RABBITMQ_NODENAME 的定義,如果有則啟用此值:如果沒有,則查看rabbitrnq-env.conf 中是否定義了NODENAME 這個(gè)變量,如果有則啟用此值,如果沒有則采用默認(rèn)的取值規(guī)則,即rabbit@$HOSTNAME 。

????????下面演示如何配置rabbitrnq-env.conf 這個(gè)文件(默認(rèn)在$RABBITMQ HOME/etc/rabbitrnq/ 目錄下,可以通過在啟動(dòng)RabbitMQ 服務(wù)時(shí)指定RABITMQ_CONF_ENV_FILE 變量來設(shè)置此文件的路徑) :

# RabbitMQ 環(huán)境變量的定義文件
#定義節(jié)點(diǎn)名稱
NODENAME=rabbit@node1
#定義RabbitMQ 的對(duì)外通信端口號(hào)
NODE_PORT=5672
#定義RabbitMQ 配置文件的目錄,注意對(duì)于rabbitmq.config
#文件來說這里不用添加、'. config 后綴"
CONFIG_FILE=/opt/rabbitmq/etc/rabbitmq/rabbitmq

????????對(duì)于默認(rèn)的取值規(guī)則,這個(gè)在$RABBITMQ_HOME/sbin/rabbitrnq-defaults 文件中有相關(guān)設(shè)置,當(dāng)然也可以通過修改這個(gè)文件中的內(nèi)容來修改RabbitMQ 的環(huán)境變量,但是并不推薦這么做,還是建議在rabbitrnq-env.conf 中進(jìn)行相應(yīng)的設(shè)置:

#!/bin/sh -e
##  The contents of this file are subject to the Mozilla Public License
##  Version 1.1 (the "License"); you may not use this file except in
##  compliance with the License. You may obtain a copy of the License
##  at https://www.mozilla.org/MPL/
##
##  Software distributed under the License is distributed on an "AS IS"
##  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
##  the License for the specific language governing rights and
##  limitations under the License.
##
##  The Original Code is RabbitMQ.
##
##  The Initial Developer of the Original Code is GoPivotal, Inc.
##  Copyright (c) 2012-2021 VMware, Inc. or its affiliates.  All rights reserved.
##### next line potentially updated in package install steps
SYS_PREFIX=${RABBITMQ_HOME}CLEAN_BOOT_FILE=start_clean
SASL_BOOT_FILE=start_sasl
BOOT_MODULE="rabbit"if test -z "$CONF_ENV_FILE" && test -z "$RABBITMQ_CONF_ENV_FILE"; thenCONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf
fi

下表是一些常見的RabbitMQ 變量

變量名稱描述
RABBITMQ_NODE_IP_ADDRESS綁定某個(gè)特定的網(wǎng)絡(luò)接口.默認(rèn)值是空字符串,即綁定到所有網(wǎng)絡(luò)接口上.如果要綁定兩個(gè)或者更多的網(wǎng)絡(luò)接口,可以參考rabbitmq.config 中的tcp_listeners 配置
RABBITMQ_NODE_PORT監(jiān)聽客戶端連接的端口號(hào),默認(rèn)為5672
RABBITMQ_DIST_PORTRabbitMQ 節(jié)點(diǎn)內(nèi)部通信的端口號(hào),默認(rèn)值為RABBITMQ_NODE_PORT+20000.所以RABBITMQ_DIST_PORT 即25672 . 如果設(shè)置了kernel. inet_dist_listen_min 或者kemel. inect_dist_listen_max 時(shí),此環(huán)境變量將被忽略
RABBITMQ_NODENAMERabbitMQ 的節(jié)點(diǎn)名稱,默認(rèn)為rabbit@$HOSTNAME . 在每個(gè)Erlang 節(jié)點(diǎn)和機(jī)器的組合中,節(jié)點(diǎn)名稱必須唯一
RABBITMQ_ CONF_ENV_FlLERabbitMQ 環(huán)境變量的配置文件(rabbitmq-env.conf) 的地址,默認(rèn)值為 $RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf。注意這里與RabbitMQ 配置文件rabbitmq.config 的區(qū)別
RABBITMQ_USE_LONGNAME如果當(dāng)前的hostname為nodel.longname. 那么默認(rèn)情況下創(chuàng)建的節(jié)點(diǎn)名稱為將此參數(shù)設(shè)置為true 時(shí),創(chuàng)建的節(jié)點(diǎn)名稱就為rabbi讓t@node1.longname,即使用了長名稱命名.默認(rèn)值為空
RABBITMQ_CONFIG_FILERabbitMQ 配置文件(rabbitmq.config) 的路徑,注意沒有".config"的后綴.默認(rèn)值為$RABBITMQ_HOME/etc/rabbitmq/rabbitmq
RABBITMQ_MNESIA_BASERABBITMQ_MNESIA_DIR 的父目錄。除非明確設(shè)置了RABBITMQ_MNESIA_DIR目錄,否則每個(gè)節(jié)點(diǎn)都應(yīng)該配置這個(gè)環(huán)境變量.默認(rèn)值為$RABBITMQ_HOME/var/lib/rabbitmq/mnesia注意對(duì)于RabbitMQ 的操作用戶來說,需要有對(duì)當(dāng)前目錄可讀、可寫、可創(chuàng)建文件及子目錄的權(quán)限
RABBITMQ_MNESIA_DIR包含RabbitMQ 服務(wù)節(jié)點(diǎn)的數(shù)據(jù)庫、數(shù)據(jù)存儲(chǔ)及集群狀態(tài)等目錄,默認(rèn)值為 $RABBITMQ_MNESIA_BASEI$RABBITMQ_NODENAME
RABBITMQ_LOG_BASERabbitMQ 服務(wù)日志所在基礎(chǔ)目錄.默認(rèn)值為$RABBITMQ_HOME/var/log/rabbitmq
RABBITMQ_LOGSRabbitMQ 服務(wù)與Erlang 相關(guān)的日志,默認(rèn)值為 $RABBITMQ_LOG_BASE/$RABBITMQ_NODENAME.log
RABBITMQ_SASL_LOGSRabbitMQ 服務(wù)于Erlang 的SASL(System Application Support Libraries)相關(guān)的日志,默認(rèn)值為$RABBITMQ_LOG BASE/$RABBITMQ_NODENAME-sasl.log
RABBITMQ_PLUGINS_DIR插件所在路徑。默認(rèn)值為$RABBITMQ_HOME/plugins

????????注意,如果沒有特殊的需求,不建議更改RabbitMQ 的環(huán)境變量。如果在實(shí)際生產(chǎn)環(huán)境中,對(duì)于配量和日志的目錄有著特殊的管理目錄,那么可以參考以下相應(yīng)的配置:

#配置文件的地址
CONFIG_FILE=/apps/conf/rabbitmq/rabbitmq
#環(huán)境變量的配置文件的地址
CONF_ENV_FILE=/apps/conf/rabbitmq/rabbitmq-env.conf
#服務(wù)日志的地址
LOG_BASE=/apps/logs/rabbitmq
#Mnesia 的路徑
MNE5IA_BA5E=/apps/dbdat/rabbitmq/mnesia

2.2、配置項(xiàng)

配置項(xiàng)描述
tcp _l isteners用來監(jiān)聽AMQP 連接(無SS L) ??梢耘渲脼槎丝谔?hào)或者端口號(hào)與主機(jī)名組成的二元數(shù)組.
num_ tcp _ acceptors用來處理TC P 連接的Erlang 進(jìn)程數(shù)目,默認(rèn)值為10
handshake_timeoutAMQP 0-8/0-9/0-9-1 握手(在socket 連接和SSL 握手之后〉的超時(shí)時(shí)間,單位為毫秒. 默認(rèn)值為10000
ssl_Iisteners同tcp_listeners. 用于SSL 連接。默認(rèn)值為[]
num_ssl_acceptors用來處理SSL 連接的Erlang 進(jìn)程數(shù)目,默認(rèn)值為l
ssl_optionsSSL 配置。默認(rèn)值為[]
ssl_handshake_timeoutSSL 的握手超時(shí)時(shí)間.默認(rèn)值為5000
vm_memory_high_watermark觸發(fā)流量控制的內(nèi)存闌值.默認(rèn)值為0.4
vm_memory_calculation_ strategy內(nèi)存使用的報(bào)告方式。一共有2 種 ( 1) rss: 采用操作系統(tǒng)的RSS 的內(nèi)存報(bào)告 ( 2) erlang: 采用Erlang 的內(nèi)存報(bào)告 默認(rèn)值為rss
vm_memory_high_watermark_paging_ratio內(nèi)存高水位的百分比闌值,當(dāng)達(dá)到闌值時(shí),隊(duì)列開始將消息持久化到磁盤以釋放內(nèi)存.這個(gè)需要配合咱一mernory_ high_wa憂rmark 這個(gè)參數(shù)一起使用.默認(rèn)值為0.5 .
disk_free_limitRabbitMQ 存儲(chǔ)數(shù)據(jù)分區(qū)的可用磁盤空間限制.當(dāng)可用空間值低于闌值時(shí),流程控制將被觸發(fā).此值可根據(jù)RAM 的相對(duì)大小來設(shè)置(如{ mem_relative, 1.0} ).此值也可以設(shè)為整數(shù)(單位為B). 或者使用數(shù)字+單位(如"50MB" ).默認(rèn)情況下,可用磁盤空間必須超過50MB . 默認(rèn)值為50000000
log_levels控制日志的粒度.該值是日志事件類別(category) 和日志級(jí)別( Ievel)的二元組列 表 目前定義了4 種日志類別 ( 1) channel : 所有與AMQP 信道相關(guān)的日志 (2) connection: 所有與連接相關(guān)的日志 (3) federation: 所有與federation 相關(guān)的日志 (4) mirroring: 所有與鏡像相關(guān)的日志 其他未分類的日志也會(huì)被記錄下來,日志級(jí)別有5 種: none 表示不記錄日志事件; error 表示只記錄錯(cuò)誤; waming 表示 只記錄錯(cuò)誤和告警; info 表示記錄錯(cuò)誤、告警和信息; debug 表示記錄錯(cuò)誤、告警、 信息和調(diào)試信息 默認(rèn)值為[ {connection, info} ]
frame_max與客戶端協(xié)商的允許最大幀大小, 單位為B . 設(shè)置為0 表示無限制,但在某些QPid客戶端會(huì)引發(fā)bug . 設(shè)置較大的值可以提高吞吐量:設(shè)置一個(gè)較小的值可能會(huì)提高延遲.默認(rèn)值為131072
channel_max與客戶端協(xié)商的允許最大信道個(gè)數(shù).設(shè)置為0 表示無限制.該數(shù)值越大,則Broker的內(nèi)存使用就越高。默認(rèn)值為0
channel_operation_timeout信道運(yùn)行的超時(shí)時(shí)間,單位為毫秒(內(nèi)部使用,因?yàn)橄f(xié)議的區(qū)別和限制,不暴露給客戶端).默認(rèn)值為15000
heartbeat服務(wù)器和客戶端連接的心跳延遲, 單位為秒.如果設(shè)置為0 ,則禁用心跳。在有大量連接的情況下,禁用心跳可以提高性能,但可能會(huì)導(dǎo)致一些異常。默認(rèn)值為60 。在3 . 5 .5版本之前為580
default_vhost設(shè)置默認(rèn)的vhost。交換器amq.rabbitmq.log 就在這個(gè)vhost 上默認(rèn)值為<<"/">>
default_user設(shè)置默認(rèn)的用戶.默認(rèn)值為<<"guest">>
default_pass設(shè)置默認(rèn)的密碼.默認(rèn)值為<<"guest" >>
default_user_tags設(shè)置默認(rèn)用戶的角色。默認(rèn)值為[administrator]
default_permissions設(shè)置默認(rèn)用戶的權(quán)限。默認(rèn)值為[<<".">>, <<".">>, <<".*">>]
loopback_ users設(shè)置只能通過本地網(wǎng)絡(luò)(如localhost) 來訪問Broker 的用戶列表。如果希望通過默認(rèn)的guest 用戶能夠通過遠(yuǎn)程網(wǎng)絡(luò)訪問Broker ,那么需要將這項(xiàng)設(shè)置為[].默認(rèn)值為<<"guest">>
cluster_nodes可以用來配置集群。這個(gè)值是一個(gè)二元組,二元組的第一個(gè)元素是想要與其建立集群關(guān)系的節(jié)點(diǎn),第二個(gè)元素是節(jié)點(diǎn)的類型,要么是disc ,要么是ram. 默認(rèn)值為{[], disc}
server_properues連接時(shí)向客戶端聲明的鍵值對(duì)列表。默認(rèn)值為[]
collect_statistics統(tǒng)計(jì)數(shù)據(jù)的收集模式,主要與RabbitMQ Management 插件相關(guān),共有3 個(gè)值可選: ( 1) none: 不發(fā)布統(tǒng)計(jì)事件 (2) coarse: 發(fā)布每個(gè)隊(duì)列/信道/連接的統(tǒng)計(jì)事件 (3) fine: 同時(shí)還發(fā)布每個(gè)消息的統(tǒng)計(jì)事件 默認(rèn)值為none
collect_statistics_interval統(tǒng)計(jì)數(shù)據(jù)的收集時(shí)間間隔,主要與RabbitMQ Management 插件相關(guān)。默認(rèn)值為5000
management_db_ cache_multiplier設(shè)置管理插件將緩存代價(jià)較高的查詢的時(shí)間.緩存將把最后一個(gè)查詢的運(yùn)行時(shí)間乘以這個(gè)值,并在此時(shí)間內(nèi)緩存結(jié)果。默認(rèn)值為5
delegate_count內(nèi)部集群通信中,委派進(jìn)程的數(shù)目。在擁有很多個(gè)內(nèi)核并且是集群中的一個(gè)節(jié)點(diǎn)的機(jī)器上可以增加此值。默認(rèn)值為16
tcp_listen_options默認(rèn)的socket 選項(xiàng)。默認(rèn)值為: [{backlog, 128}, {nodelay, true} , {linger, {true,0} }, {exit_ on_close, false})
hipe_compile將此項(xiàng)設(shè)直為田e 就可以開啟HiPE 功能,即Er1ang 的即時(shí)編譯器。雖然在啟動(dòng)時(shí)會(huì)增加時(shí)延,但是能夠有20%- 50%的性能提升, 當(dāng)然這個(gè)數(shù)字高度依賴于負(fù)載和機(jī)器硬件。在你的Er1ang 安裝包中可能沒有包含HiPE 的支持,如果沒有,則在開啟這一項(xiàng),并且在RabbitMQ 啟動(dòng)時(shí)會(huì)有相應(yīng)的告警信息。HiPE 并非在所有平臺(tái)都可以尤其是Windows操作系統(tǒng),在Erlang/OTP17.5版本之前,HiPE 有明顯問題。如果要使用HiPE 推薦使用最新版的Erlang/OTP. 默認(rèn)值為false
cluster_partition_handling如何處理網(wǎng)絡(luò)分區(qū)。有4 種取值: ignore; pause_minority; {pause_if_a ll_down, [nodes],ignore |autheal}; autoheal 默認(rèn)值為fa l se
cluster_keepalive_interval向其他節(jié)點(diǎn)發(fā)送存活消息的頻率.單位為毫秒。這個(gè)參數(shù)和net_ticktime 參數(shù)不同,丟失存活消息并不會(huì)導(dǎo)致節(jié)點(diǎn)被認(rèn)為己失效。默認(rèn)值為10000
queue_index_embed_msgs_below消息的大小小于此值時(shí)會(huì)直接嵌入到隊(duì)列的索引中.單位為B . 默認(rèn)值為4096
msg_store_index_module隊(duì)列索引的實(shí)現(xiàn)模塊。默認(rèn)值為:rabbit_msg_store_ets_index
backing_queue_module隊(duì)列內(nèi)容的實(shí)現(xiàn)模塊。默認(rèn)值為rabbit_variable_queue . 不建議修改此項(xiàng)
rnnesia_table_loading_retry_limit等待集群中Mnes ia 數(shù)據(jù)表可用時(shí)最大的重試次數(shù) 默認(rèn)值為10
mnesia_table_loading_retry_timeout每次重試時(shí),等待集群中Mnesia 數(shù)據(jù)表可用時(shí)的超時(shí)時(shí)間 默認(rèn)值為30000
queue_master_locator隊(duì)列的定位策略, 即創(chuàng)建隊(duì)列時(shí)以什么策略判斷坐落的Broker 節(jié)點(diǎn),如果配置了鏡像,則這里指master 鏡像的定位策略可用的策略有<<"min- masters">> 、<<"cli ent-l ocal ">> 、<<" random" >> 。默認(rèn)值為<<"client-local">>
lazy_queue_explicit_gc_run_operation_threshold在使用惰性隊(duì)列(lazy queue) 時(shí)進(jìn)行內(nèi)存回收動(dòng)作的閥值。一個(gè)低的值會(huì)降低性能,一個(gè)高的值可以提高性能, 但是會(huì)導(dǎo)致更高的內(nèi)存消稅。默認(rèn)值為1 000
queue_explicit_gc_run_operation_threshold在使用正常隊(duì)列時(shí)進(jìn)行內(nèi)存回收動(dòng)作的閥值. 一個(gè)低的值會(huì)降低性能, 一個(gè)高的值可以提高性能, 但是會(huì)導(dǎo)致更高的內(nèi)存消耗.默認(rèn)值為1 000

2.3、網(wǎng)絡(luò)配置優(yōu)化

????????網(wǎng)絡(luò)是客戶端和RabbitMQ 之間通信的媒介。RabbitMQ 支持的所有協(xié)議都是基于TCP 層面的。包括操作系統(tǒng)和RabbitMQ 本身都提供了許多可調(diào)節(jié)的參數(shù),除了操作系統(tǒng)內(nèi)核參數(shù)和DNS ,所有的RabbitMQ 設(shè)置都可以通過在rabbitmq.config 配置文件中配置來實(shí)現(xiàn)。

????????RabbitMQ 在等待接收客戶端連接時(shí)需要綁定一個(gè)或者多個(gè)網(wǎng)絡(luò)接口( 可以理解成E 地址),并監(jiān)聽特定的端口。網(wǎng)絡(luò)接口使用rabbit .tcp listeners 選項(xiàng)來配置。默認(rèn)情況下,RabbitMQ 會(huì)在所有可用的網(wǎng)絡(luò)接口上監(jiān)聽5672 端口。下面的示例演示了如何在一個(gè)指定的IP地址和端口上進(jìn)行監(jiān)聽:

## Related doc guide: https://rabbitmq.com/networking.html.
##
## By default, RabbitMQ will listen on all interfaces, using
## the standard (reserved) AMQP 0-9-1 and 1.0 port.
##
# listeners.tcp.default = 5672## To listen on a specific interface, provide an IP address with port.
## For example, to listen only on localhost for both IPv4 and IPv6:
##
# IPv4
# listeners.tcp.local    = 127.0.0.1:5672
# IPv6
# listeners.tcp.local_v6 = ::1:5672## You can define multiple listeners using listener names
# listeners.tcp.other_port = 5673
# listeners.tcp.other_ip   = 10.10.10.10:5672

????????優(yōu)化網(wǎng)絡(luò)配置的一個(gè)重要目標(biāo)就是提高吞吐量,比如禁用Nagle 算法、增大TCP 緩沖區(qū)的大小。每個(gè)TCP 連接都分配了緩沖區(qū)。一般來說,緩沖區(qū)越大,吞吐量也會(huì)越高,但是每個(gè)連接上耗費(fèi)的內(nèi)存也就越多,從而使總體服務(wù)的內(nèi)存增大,這是一個(gè)權(quán)衡的問題。在Linux 操作系統(tǒng)中,默認(rèn)會(huì)自動(dòng)調(diào)節(jié)TCP 緩沖區(qū)的大小,通常會(huì)設(shè)置為80KB 到120KB 之間。要提高吞吐量可以使用rabbit.tcp_listen_options 來加大配置。下面的示例中將TCP 緩沖區(qū)大小設(shè)置為192KB(192*1024 = 196608):

## Customising TCP Listener (Socket) Configuration.
##
## Related doc guides:
##
## * https://rabbitmq.com/networking.html
## * https://www.erlang.org/doc/man/inet.html#setopts-2
### tcp_listen_options.backlog = 128
# tcp_listen_options.nodelay = true
# tcp_listen_options.exit_on_close = false
#
# tcp_listen_options.keepalive = true
# tcp_listen_options.send_timeout = 15000
#
# tcp_listen_options.buffer = 196608
# tcp_listen_options.sndbuf = 196608
# tcp_listen_options.recbuf = 196608

????????Erlang 在運(yùn)行時(shí)使用線程池來異步執(zhí)行1/0 操作。線程池的大小可以通過RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS 這個(gè)環(huán)境變量來調(diào)節(jié)。示例如下:

RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS= "+A 128"

????????目前3.6.x 版本的默認(rèn)值為128。當(dāng)機(jī)器的內(nèi)核個(gè)數(shù)大于等于8 時(shí),建議將此值設(shè)置為大于等于96 , 這樣可以確保每個(gè)內(nèi)核上可以運(yùn)行大于等于12 個(gè)I/O 線程。注意這個(gè)值并不是越高越能提高吞吐量。

????????大部分操作系統(tǒng)都限制了同一時(shí)間可以打開的文件句柄數(shù)。在優(yōu)化并發(fā)連接數(shù)的時(shí)候, 需確保系統(tǒng)有足夠的文件句柄數(shù)來支撐客戶端和Broker 的交互。可以用每個(gè)節(jié)點(diǎn)上連接的數(shù)目乘以 1.5來粗略的估算限制。例如,要支撐10 萬個(gè)TCP 連接,需要設(shè)置文件句柄數(shù)為15 萬。當(dāng)然,略微增加文件句柄數(shù)可以增加閑置機(jī)器內(nèi)存的使用量,但這需要合理權(quán)衡。

????????如上所述,增大TCP 緩沖區(qū)的大小可以提高吞吐量,如果減小TCP 緩沖區(qū)的大小,這樣就可以減小每個(gè)連接上的內(nèi)存使用量。如果并發(fā)量比吞吐量更重要,可以修改此值。

????????前面所提到的禁用Nagle 算法可以提高吞吐量,但是其主要還是用于減少延遲。RabbitMQ 內(nèi)部節(jié)點(diǎn)交互時(shí)可以在kernel.inet_default_connect_options 和kernel.inet_default_listen_options 配置項(xiàng)中配置{nodelay , true} 來禁用Nagle 算法。rabbit.tcp_listen_options 也需要包含同樣的配置,井且默認(rèn)都是這樣配置的,參考下面示例:

#設(shè)置為true時(shí),禁用 Nagle的算法。默認(rèn)是真的。
tcp_listen_options.nodelay

????????當(dāng)優(yōu)化井發(fā)連接數(shù)時(shí),恰當(dāng)?shù)腅rlang 虛擬機(jī)的 I/O?線程池的大小也很重要,具體可以參考前面的內(nèi)容。

????????當(dāng)只有少量的客戶端時(shí),新建立的連接分布是非常不均勻的, 但是由于數(shù)量足夠小, 所以沒有太大的差異。當(dāng)連接數(shù)量到達(dá)數(shù)萬或者更多時(shí),重要的是確保服務(wù)器能夠接受入站連接。未接受的TCP 連接將會(huì)放在有長度限制的隊(duì)列中。這個(gè)通過rabbit.tcp_listen_options.backlog 參數(shù)來設(shè)置,詳細(xì)內(nèi)容可以參考前一個(gè)示例。默認(rèn)值為128 ,當(dāng)掛起的連接隊(duì)列的長度超過此值時(shí),連接將被操作系統(tǒng)拒絕。

通用TCP套接字選項(xiàng)

參數(shù)項(xiàng)描述
rabbit.tcp_listen_options. nodelay當(dāng)設(shè)置為true. 可禁用Nagle 算法。默認(rèn)為true。對(duì)于大多數(shù)用戶而言,推薦設(shè)置為true
rabbit. tcp_listen_options.sndbuf參考前面討論的TCP 緩沖區(qū)。一般取值范圍在88 KB 至128KB 之間。增大緩沖區(qū)可以提高消費(fèi)者的吞吐量,同時(shí)也會(huì)加大每個(gè)連接上的內(nèi)存使用量。減小則有相反的效果
rabbit. tcp_listen_options.recbuf參考前面討論的TCP 緩沖區(qū)。一般取值范圍同樣在88阻至1 28KB 之間。一般是針對(duì)發(fā)送者或者協(xié)議操作
rabbit.tcp_listen_options. backlog隊(duì)列中未接受連接的最大數(shù)目。當(dāng)達(dá)到此值時(shí),新連接會(huì)被拒絕。對(duì)于成千上萬的并發(fā)連接環(huán)境及可能存在大量客戶重新連接的場(chǎng)景,可設(shè)為4096 或更高
rabbit.tcp listen_ options.linger當(dāng)套接字關(guān)閉時(shí),設(shè)置為{true,N}. 用于設(shè)置刷新未發(fā)送數(shù)據(jù)的超時(shí)時(shí)間, 單位為秒
rabbit.tcp_listen_options.keepalive當(dāng)設(shè)置為true 時(shí),啟用TCP 的存活時(shí)間。默認(rèn)為falseo 對(duì)于長時(shí)間空閑的連接(至少10 分鐘〕是有意義的,雖然更推薦使用heartbeat 的選項(xiàng)

????????與操作系統(tǒng)有關(guān)的網(wǎng)絡(luò)設(shè)置也會(huì)影響到RabbitMQ 的運(yùn)行, 理解這些設(shè)置選項(xiàng)同樣至關(guān)重要。注意這一類型的內(nèi)核參數(shù)在 /etc/sysctl.conf?文件( Linux 操作系統(tǒng))中配置, 而不是在rabbitmq . config 這個(gè)文件中。

可配置的內(nèi)核選項(xiàng)

參數(shù)項(xiàng)描述
fs.file-max內(nèi)核分配的最大文件句柄數(shù)。極限值和當(dāng)前值可以通過/proc/sys/fs/file-nr 來查看。 示例如下: [iot@lidechang-test ~]$ cat /proc/sys/fs/file-nr 81632 0 1048576
net. ipv4.ip_local_port_range本地 IP 端口范圍,定義為一對(duì)值。該范圍必須為并發(fā)連接提供足夠的條目
net. ipv4. tcp_tw_reuse當(dāng)啟用時(shí),允許內(nèi)核重用TIME_WAIT 狀態(tài)的套接字。當(dāng)用在NAT 時(shí),此選項(xiàng)是很危險(xiǎn)的
net. ipv4.tcp_fin_timeout降低此值到5-10 可減少連接關(guān)閉的時(shí)間,之后會(huì)停留在TIME WAIT狀態(tài),建議用在有大量并發(fā)連接的場(chǎng)景
net.core.somaxconn監(jiān)聽隊(duì)列的大小〈同一時(shí)間建立過程中有多少個(gè)連接).默認(rèn)為128. 增大到4096 或更高,可以支持入站連接的爆發(fā),如clients 集體重連
net. ipv4.tcp_max_syn_backlog尚未收到連接客戶端確認(rèn)的連接請(qǐng)求的最大數(shù)量.默認(rèn)為128. 最大值為65535 . 優(yōu)化吞吐量時(shí). 4096 和8192 是推薦的起始值
net.ipv4.tcp_keepalive_*net.ipv4. tcp_keepalive_time, net.ipv4. tcp_keepalive _ intvl 和net. ipv4.tcp_keepalive_probes 用于配置TCP 存活時(shí)間
net. ipv4.conf.defau1t.rp_filter啟用反向地址過濾.如果系統(tǒng)不關(guān)心 IP 地址欺騙,那么就禁用它

2.4、基本配置說明

##Rabbitmq下載地址 & Erlang下載地址
###Rabbitmq下載: https://www.rabbitmq.com/download.html
###Erlang下載:https://github.com/rabbitmq/erlang-rpm/releases#端口訪問說明
##SELinux和類似的機(jī)制可能會(huì)阻止RabbitMQ綁定到一個(gè)端口。發(fā)生這種情況時(shí),RabbitMQ將無法啟動(dòng)防火墻可以防止節(jié)點(diǎn)和CLI工具相互通信。確??梢源蜷_以下端口:
4369:#epmd, RabbitMQ節(jié)點(diǎn)和CLI工具使用的對(duì)等發(fā)現(xiàn)服務(wù)
5672,5671:  #由AMQP 0-9-1和1.0客戶端使用
25672:     #由Erlang分配用于節(jié)點(diǎn)間和CLI工具通信,并且從動(dòng)態(tài)范圍分配(AMQP端口+20000)
15672:     #HTTP API客戶端和rabbitmqadmin(僅當(dāng)管理插件啟用時(shí))#調(diào)整系統(tǒng)限制
##運(yùn)行生產(chǎn)工作負(fù)載的RabbitMQ安裝可能需要系統(tǒng)限制和內(nèi)核參數(shù)調(diào)整,以便處理體面的并發(fā)連接和隊(duì)列。需要調(diào)整的主要設(shè)置是打開文件的最大數(shù)量
echo "* soft nproc 65535" >> /etc/security/limits.conf
echo "* hard nproc 65535" >> /etc/security/limits.conf
echo "* soft nofile 655350" >> /etc/security/limits.conf
echo "* hard nofile 655350" >> /etc/security/limits.conf
echo "ulimit -u 65535" >> /etc/profile
echo "ulimit -n 655350" >> /etc/profile#修改rabbitmq配置
#    修改/etc/systemd/system/multi-user.target.wants/rabbitmq-server.service
#    在[Service]中,增加LimitNOFILE=30000(具體數(shù)值根據(jù)需要)
##執(zhí)行重啟rabbitmq服務(wù)
systemctl daemon-reload
##查看狀態(tài)
rabbitmqctl status#日志
##默認(rèn)的情況下,日志位于/var/log/rabbitmq目錄中,服務(wù)器的輸出被發(fā)送到RABBITMQ_NODENAME.log文件 。其他日志數(shù)據(jù)寫入RABBITMQ_NODENAME-sasl.log

2.5、常用操作

#配置方式
#環(huán)境變量:網(wǎng)絡(luò)參數(shù)及配置文件路徑
#配置文件:服務(wù)器各組件訪問權(quán)限,資源限制,插件及集群
#運(yùn)行時(shí)參數(shù):集群的運(yùn)行時(shí)參數(shù)設(shè)定
#
#環(huán)境變量:/etc/rabbitmq/rabbitmq-env.confRABBITMQ_BASE:數(shù)據(jù)庫和日志文件存放位置RABBITMQ_CONFIG_FILE:配置文件路徑; /etc/rabbitmq/rabbitmqRABBITMQ_LOGS:日志RABBITMQ_NODE_IP_ADDRESS:監(jiān)聽的ipRABBITMQ_NODE_PORT:RABBITMQ_PLUGINS_DIR:#配置文件:auth_mechanisms:認(rèn)證機(jī)制default_user:guestdefault_pass:guestdefault_permission:disk_free_limit: 磁盤預(yù)留空間heartbeat:消息時(shí)長hipe_compile:使用默認(rèn)編譯器還是高級(jí)編譯器log_levels:{none|error|warning|info}tcp_listeners:監(jiān)聽的地址和端口ssl_listeners:基于ssl通信監(jiān)聽的地址和端口vm_memory_high_watermark:#運(yùn)行時(shí)參數(shù):rabbitmqctl -hrabbitmqctl statusset_parameter [-p <vhostpath>] <component_name> <name> <value>clear_parameter [-p <vhostpath>] <component_name> <key>list_parameters [-p <vhostpath>]#設(shè)置清除參數(shù)set_policy [-p <vhostpath>] <name> <pattern>  <definition> [<priority>] clear_policy [-p <vhostpath>] <name>list_policies [-p <vhostpath>]set_vm_memory_high_watermark <fraction>stop [<pid_file>]stop_app  停止所有應(yīng)用start_app  啟動(dòng)所有應(yīng)用add_user <username> <password>delete_user <username>change_password <username> <newpassword>clear_password <username>set_user_tags <username> <tag> ...       例:rabbitmqctl set_user_tags test administratorlist_users#設(shè)定哪個(gè)用戶對(duì)哪個(gè)虛擬主機(jī)有哪些權(quán)限add_vhost <vhostpath>   例:rabbitmqctl add_vhost /myhost/test1   delete_vhost <vhostpath>list_vhosts [<vhostinfoitem> ...]set_permissions [-p <vhostpath>] <user> <conf> <write> <read>clear_permissions [-p <vhostpath>] <username>list_permissions [-p <vhostpath>]list_user_permissions <username>rabbitmqctl set_permissions -p /myhost/test test '.*' '.*' '.*'Setting permissions for user "test" in vhost "/myhost/test" ......done.rabbitmqctl list_permissions -p /myhost/testListing permissions in vhost "/myhost/test" ...test    .*  .*  .*...done.#組件查看list_queues [-p <vhostpath>] [<queueinfoitem> ...]list_exchanges [-p <vhostpath>] [<exchangeinfoitem> ...]list_bindings [-p <vhostpath>] [<bindinginfoitem> ...]list_connections [<connectioninfoitem> ...]list_channels [<channelinfoitem> ...]list_consumers [-p <vhostpath>]#broker狀態(tài)查看status#環(huán)境變量查看environment#關(guān)閉指定連接close_connection <connectionpid> <explanation>#內(nèi)存使用set_vm_memory_high_watermark <fraction>

2.6、配置參數(shù)解釋

#像RabbitMQ這樣的數(shù)據(jù)服務(wù)通常有許多可調(diào)參數(shù)。一些配置對(duì)開發(fā)有很大的意義,但并不適合生產(chǎn),本指南旨在為此提供幫助
#
#虛擬主機(jī)
#例如,在單租戶環(huán)境中,當(dāng)您的RabbitMQ集群專門為生產(chǎn)中的單個(gè)系統(tǒng)供電時(shí),使用默認(rèn)的虛擬主機(jī)(/)是完全正確的
#在多租戶環(huán)境中,為每個(gè)租戶/環(huán)境使用單獨(dú)的虛擬主機(jī),例如project1_development, project1_production,project2_development和  project2_production等
#
#
#用戶
#對(duì)于生產(chǎn)環(huán)境,請(qǐng)刪除默認(rèn)用戶(guest),默認(rèn)用戶只能從本地主機(jī)默認(rèn)連接,因?yàn)樗哂斜娝苤膽{據(jù)。不要啟用遠(yuǎn)程連接,而應(yīng)考慮使用具有管理權(quán)限和生成密碼的單獨(dú)用戶
#建議每個(gè)應(yīng)用程序使用一個(gè)單獨(dú)的用戶。例如,如果您有一個(gè)移動(dòng)應(yīng)用程序,一個(gè)Web應(yīng)用程序和一個(gè)數(shù)據(jù)聚合系統(tǒng),您將有3個(gè)獨(dú)立的用戶。這使得許多事情更容易:將客戶端連接與應(yīng)用程序關(guān)聯(lián)
#
#
#權(quán)限控制
#認(rèn)證和授權(quán)通常會(huì)混淆或互換使用。這是錯(cuò)誤的,在RabbitMQ中,兩者是分開的。為了簡單起見,我們將認(rèn)證定義為“標(biāo)識(shí)用戶是誰”,授權(quán)定義為“確定用戶是什么,不允許做什么”
#默認(rèn)的虛擬主機(jī)和用戶
#  當(dāng)服務(wù)器首次開始運(yùn)行,并檢測(cè)到其數(shù)據(jù)庫未初始化或被刪除時(shí),它將使用一下資源初始化一個(gè)新的數(shù)據(jù)庫
#  一個(gè)名為 /虛擬主機(jī)
#  一個(gè)名為guest的用戶,默認(rèn)密碼為guest,被授予對(duì)/虛擬主機(jī)的完全訪問權(quán)限
#  明智的做法是刪除guest用戶或更改密碼,特別是在公共網(wǎng)絡(luò)上訪問
#  默認(rèn)情況下guest用戶被禁止遠(yuǎn)程連接到代理,它只能通過localhost連接。我們創(chuàng)建的其他用戶默認(rèn)情況下沒有這種限制
#  如果我們希望允許guest用戶從遠(yuǎn)程主機(jī)連接,則應(yīng)將loopback_users配置設(shè)置 為  none,如下:loopback_users = none
#權(quán)限如何工作
#
#當(dāng)一個(gè)RabbitMQ客戶端建立到一個(gè)服務(wù)器的連接時(shí),它指定了一個(gè)虛擬主機(jī)。此時(shí)執(zhí)行第一級(jí)訪問控制,服務(wù)器檢查用戶是否有權(quán)訪問虛擬主機(jī),否則拒絕連接嘗試
#資源(即交換和隊(duì)列)在特定虛擬主機(jī)內(nèi)被命名為實(shí)體;當(dāng)對(duì)資源執(zhí)行某些操作時(shí),強(qiáng)制執(zhí)行第二級(jí)訪問控制
#
#RabbitMQ在資源上有配置、寫入、讀取操作
#                配置:創(chuàng)建或銷毀資源,或更改其行為
#                寫: 寫入消息到資源
#                讀: 檢索資源的消息
# 
#
#內(nèi)存
#默認(rèn)情況下,當(dāng)RabbitMQ檢測(cè)到使用的內(nèi)存超過40%(由操作系統(tǒng)報(bào)告)時(shí),將不會(huì)接收任何消息:{vm_memory_high_watermark,0.4},這是一個(gè)安全的默認(rèn)值
#在修改此值應(yīng)該小心,即使主機(jī)是專用的RabbitMQ節(jié)點(diǎn),因?yàn)槿绻麤]有足夠的空閑系統(tǒng)內(nèi)存,將會(huì)對(duì)操作系統(tǒng)交換造成不利影響,甚至?xí)?dǎo)致RabbitMQ進(jìn)程終止
#調(diào)整默認(rèn)vm_memory_high_watermark時(shí)的一些建議
#  托管RabbitMQ的節(jié)點(diǎn)應(yīng)始終具有至少128MB的可用內(nèi)存
#  推薦的vm_memory_high_watermark范圍是  0.40到0.66
#  值不要超過0.7。操作系統(tǒng)和文件系統(tǒng)必須至少保留30%的內(nèi)存,否則性能可能因?qū)ず舳鴩?yán)重降級(jí)
#比如修改配置調(diào)整為0.6,編輯rabbitmq.conf
vm_memory_high_watermark.relative = 0.6#磁盤空間
#disk_free_limit默認(rèn)值是50MB
#  {disk_free_limit,{mem_relative,1.0}}是最小推薦值,和內(nèi)存的容量一樣大
#  例如,在專用于具有4GB系統(tǒng)內(nèi)存的RabbitMQ的主機(jī)上,如果可用磁盤空間低于4GB,所有發(fā)布者將被阻止,并且不會(huì)接收新消息。隊(duì)列將需要被排空,通常由消費(fèi)者,在發(fā)布之前將被允許恢復(fù)
#  {disk_free_limit,{mem_relative,1.5}}是一個(gè)更安全的產(chǎn)品價(jià)值
#  在具有4GB內(nèi)存的RabbitMQ節(jié)點(diǎn)上,如果可用磁盤空間低于6GB,則所有新消息都將被阻止,直到磁盤警報(bào)清除
#{disk_free_limit,{mem_relative,2.0}}是最保守的產(chǎn)品價(jià)值,我們想不出任何理由使用更高的產(chǎn)品。如果您希望RabbitMQ擁有所有需要的磁盤空間,編輯rabbitmq.conf,比如修改配置調(diào)整為2Gdisk_free_limit.absolute = 2GB#打開文件句柄限制
#保證您的環(huán)境至少允許有效的RabbitMQ用戶使用至少50K的開放文件描述符,包括在開發(fā)環(huán)境中
#
#
#監(jiān)控
#強(qiáng)烈建議監(jiān)視系統(tǒng)的幾個(gè)方面,從基礎(chǔ)架構(gòu)和內(nèi)核度量到RabbitMQ到應(yīng)用程序級(jí)度量。雖然監(jiān)控需要在時(shí)間上進(jìn)行前期投資,但在提前(或根本)解決問題方面非常有效。
#參考zabbix監(jiān)控(http://blog.thomasvandoren.com/monitoring-rabbitmq-queues-with-zabbix.html)
#https://github.com/jasonmcintosh/rabbitmq-zabbix
#
#
#日志收集
#強(qiáng)烈建議所有RabbitMQ節(jié)點(diǎn)和應(yīng)用程序(如果可能的話)的日志都被收集和匯總。日志對(duì)于調(diào)查不尋常的系統(tǒng)行為至關(guān)重要
#
#
#節(jié)點(diǎn)時(shí)間同步
#節(jié)點(diǎn)時(shí)間同步
#
#
#網(wǎng)絡(luò)配置
#TCP偵聽器配置接口和端口listeners.tcp.1 = 192.168.1.99:5672
#將RabbitMQ配置為僅在IPv4和IPv6上的本地主機(jī)上偵聽(雙協(xié)議)listeners.tcp.1 = 127.0.0.1:5672
listeners.tcp.2 = :: 1:5672
TCP緩沖區(qū)大小#這是關(guān)鍵的可調(diào)參數(shù)之一。每個(gè)TCP連接都有為其分配的緩沖區(qū)。一般來說,這些緩沖區(qū)越大,每個(gè)連接使用的內(nèi)存就越多,吞吐量越好
#在Linux系統(tǒng)上,操作系統(tǒng)默認(rèn)會(huì)自動(dòng)調(diào)整TCP緩沖區(qū)大小,通常在80-120KB之間
#可以使用rabbit.tcp_listen_options, rabbitmq_mqtt.tcp_listen_options,  rabbitmq_amqp1_0.tcp_listen_options和相關(guān)的配置項(xiàng)來增加緩沖區(qū)大小
#以下示例將AMQP 0-9-1連接的TCP緩沖區(qū)設(shè)置為192 KiB(請(qǐng)注意,將發(fā)送和接收緩沖區(qū)大小設(shè)置為不同的值是危險(xiǎn)的,不推薦使用):即每個(gè)連接使用的RAM
tcp_listen_options.backlog = 128
tcp_listen_options.nodelay = true
tcp_listen_options.linger.on = true
tcp_listen_options.linger.timeout = 0
tcp_listen_options.sndbuf = 196608 
tcp_listen_options.recbuf = 196608
#有些環(huán)境中每個(gè)節(jié)點(diǎn)持續(xù)并發(fā)連接數(shù)量比吞吐量更重要,因此需要為每個(gè)工作負(fù)載找到吞吐量和每個(gè)連接的RAM使用量之間的最佳值,不建議低于8K
#
#連接握手超時(shí)
#RabbitMQ的連接握手超時(shí),默認(rèn)10秒。當(dāng)客戶端運(yùn)行在嚴(yán)重受限的環(huán)境中時(shí),可能需要增加超時(shí)。這可以通過rabbit.handshake_timeout(毫秒)完成:
handshake_timeout = 20000#OS級(jí)調(diào)整
fs.file-MAX                     內(nèi)核將分配的最大文件數(shù)量
net.ipv4.ip_local_port_range    本地IP端口范圍,定義為一對(duì)值。范圍必須為并發(fā)連接的峰值數(shù)量提供足夠的條目
net.ipv4.tcp_tw_reuse           啟用時(shí),允許內(nèi)核在TIME_WAIT 狀態(tài)下重新使用套接字
net.ipv4.tcp_fin_timeout        將此值降低到5-10會(huì)減少關(guān)閉連接保持TIME_WAIT狀態(tài)的時(shí)間。推薦用于預(yù)計(jì)大量并發(fā)連接的情況。
net.core.somaxconn              偵聽隊(duì)列的大小(同時(shí)建立多少個(gè)連接)。默認(rèn)值是128.增加到4096或更高,以支持入站連接突發(fā),例如,當(dāng)客戶端重新連接時(shí)
net.ipv4.tcp_max_syn_backlog    記錄的連接請(qǐng)求的最大數(shù)量尚未從連接客戶端收到確認(rèn)。默認(rèn)值為128,最大值為65535.當(dāng)優(yōu)化吞吐量時(shí),建議使用4096和8192開始值
net.ipv4.conf.default.rp_filter 啟用反向路徑過濾。如果IP地址欺騙 不是您的系統(tǒng)所關(guān)心的,請(qǐng)將其禁用tcp_listen_options.nodelay      設(shè)置為true時(shí),禁用 Nagle的算法。默認(rèn)是真的。強(qiáng)烈建議大多數(shù)用戶
tcp_listen_options.sndbuf       默認(rèn)值由OS自動(dòng)調(diào)整,通常在現(xiàn)代Linux版本的88 KiB至128 KiB范圍內(nèi)。增加緩沖區(qū)大小可提高每個(gè)連接的消費(fèi)者吞吐量和RAM使用量。減少有相反的效果
tcp_listen_options.recbuf       默認(rèn)值的效果與rabbit.tcp_listen_options.sndbuf類似,但是對(duì)于發(fā)布者和協(xié)議操作來說一般
tcp_listen_options.backlog      未接受的TCP連接隊(duì)列的最大大小。達(dá)到這個(gè)尺寸時(shí),新的連接將被拒絕。對(duì)于具有數(shù)千個(gè)并發(fā)連接和可能的批量客戶端重新連接的環(huán)境,設(shè)置為4096或更高
tcp_listen_options.keepalive    當(dāng)設(shè)置為true時(shí),啟用TCP保持活動(dòng)(見上文)。默認(rèn)是false。對(duì)于連接可以長時(shí)間閑置(至少10分鐘)的環(huán)境有意義,但仍然建議使用心跳TCP Keepalivesnet.ipv4.tcp_keepalive_time = 60net.ipv4.tcp_keepalive_intvl = 15net.ipv4.tcp_keepalive_probes = 4
#    TCP包含一個(gè)類似于心跳(aka keepalive)的機(jī)制,在消息傳遞協(xié)議和上面的網(wǎng)絡(luò)核對(duì)超時(shí)(TCP tickal timeout)中包含TCP保持活動(dòng)。由于默認(rèn)設(shè)置不足,TCP Keepalive通常不會(huì)按照
#    預(yù)期的方式工作:需要很長時(shí)間(例如,一個(gè)小時(shí)或更長時(shí)間)才能檢測(cè)到死亡的對(duì)等方。但是,通過調(diào)整,它們可以達(dá)到與心跳相同的目的,并且有意或無意地清除陳舊的TCP連接,例如
#    選擇不使用心跳的客戶端。下面是TCP keepalive的sysctl配置示例,它認(rèn)為TCP連接在120秒后死機(jī)或不可達(dá)(連接空閑60秒后每15秒4次嘗試):
#    在RabbitMQ操作員無法控制應(yīng)用程序設(shè)置或使用的客戶端庫的環(huán)境中,TCP Keepalive可以成為有用的附加防御機(jī)制。
#分區(qū)處理策略
#
#在投入生產(chǎn)之前 選擇分區(qū)處理策略非常重要
#強(qiáng)烈建議不要在網(wǎng)絡(luò)分區(qū)的環(huán)境中部署RabbitMQ集群

2.7、官方配置詳解

官方的配置文件說明:http://www.rabbitmq.com/configure.html

##相關(guān)文檔指南:http://rabbitmq.com/configure.html。看到## 聯(lián)網(wǎng)
## ====================
##
##相關(guān)文檔指南:http://rabbitmq.com/networking.html。
##
##默認(rèn)情況下,RabbitMQ將使用偵聽所有接口
##標(biāo)準(zhǔn)(保留)AMQP 0-9-1和1.0端口。
##
#listeners.tcp.default = 5672##要監(jiān)聽特定的接口,請(qǐng)?zhí)峁в卸丝诘腎P地址。
##例如,只在本地主機(jī)上偵聽IPv4和IPv6:
##
#IPv4
#listeners.tcp.local = 127.0.0.1:5672
#IPv6
#listeners.tcp.local_v6 = :: 1:5672##您可以使用偵聽器名稱定義多個(gè)偵聽器
#listeners.tcp.other_port = 5673
#listeners.tcp.other_ip = 10.10.10.10:5672## TLS監(jiān)聽器的配置方式與TCP監(jiān)聽器相同,
##包括控制界面選擇的選項(xiàng)。
##
#listeners.ssl.default = 5671##將接受TCP連接的Erlang進(jìn)程的數(shù)量
##和TLS監(jiān)聽器。
##
#num_acceptors.tcp = 10
#num_acceptors.ssl = 1## AMQP 0-8 / 0-9 / 0-9-1握手的最大時(shí)間(套接字連接后)
##和TLS握手),以毫秒為單位。
##
#handshake_timeout = 10000##設(shè)置為'true'在接受a時(shí)執(zhí)行反向DNS查詢
##連接。主機(jī)名將被顯示,而不是IP地址
#在rabbitmqctl中的##和管理插件。
##
#reverse_dns_lookups = true##
##安全,訪問控制
## ==============
####相關(guān)文檔指南:http://rabbitmq.com/access-control.html。##默認(rèn)的“訪客”用戶只能訪問服務(wù)器
##通過一個(gè)回送接口(例如本地主機(jī))。
## {loopback_users,[<<“guest”>>]},
##
#loopback_users.guest = true##如果您想允許訪問,請(qǐng)取消注釋以下行
##來賓用戶從網(wǎng)絡(luò)上的任何地方。
#loopback_users.guest = false## TLS配置。
##
##相關(guān)文檔指南:http://rabbitmq.com/ssl.html。
##
#ssl_options.verify = verify_peer
#ssl_options.fail_if_no_peer_cert = false
#ssl_options.cacertfile = /path/to/cacert.pem
#ssl_options.certfile = /path/to/cert.pem
#ssl_options.keyfile = /path/to/key.pem##選擇要使用的認(rèn)證/授權(quán)后端。
##
##備用后端由插件提供,例如rabbitmq-auth-backend-ldap。
##
##注意:這些設(shè)置需要啟用某些插件。
##
##相關(guān)文檔指南:
##
## * http://rabbitmq.com/plugins.html
## * http://rabbitmq.com/access-control.html
###auth_backends.1 = rabbit_auth_backend_internal##使用單獨(dú)的后端進(jìn)行身份驗(yàn)證和授權(quán),
## 見下文。
#auth_backends.1.authn = rabbit_auth_backend_ldap
#auth_backends.1.authz = rabbit_auth_backend_internal## rabbitmq_auth_backend_ldap插件允許經(jīng)紀(jì)人
##通過推遲到一個(gè)執(zhí)行認(rèn)證和授權(quán)
##外部LDAP服務(wù)器。
##
##相關(guān)文檔指南:
##
## * http://rabbitmq.com/ldap.html
## * http://rabbitmq.com/access-control.html
##
##使用LDAP進(jìn)行身份驗(yàn)證和授權(quán)
#auth_backends.1 = rabbit_auth_backend_ldap##使用HTTP服務(wù)進(jìn)行身份驗(yàn)證和
##授權(quán)
#auth_backends.1 = rabbit_auth_backend_http##在鏈中使用兩個(gè)后端:首先是HTTP,然后是內(nèi)部
#auth_backends.1 = rabbit_auth_backend_http
#auth_backends.2 = rabbit_auth_backend_internal##認(rèn)證
##內(nèi)置的機(jī)制是“普通”,
##'AMQPLAIN'和'EXTERNAL'可以通過添加其他機(jī)制
##插件。
##
##相關(guān)文檔指南:http://rabbitmq.com/authentication.html。
##
#auth_mechanisms.1 = PLAIN
#auth_mechanisms.2 = AMQPLAIN## rabbitmq-auth-mechanism-ssl插件使得它成為可能
##根據(jù)客戶端的x509(TLS)證書對(duì)用戶進(jìn)行身份驗(yàn)證。
##相關(guān)文檔指南:http://rabbitmq.com/authentication.html。
##
##要使用auth-mechanism-ssl,EXTERNAL機(jī)制應(yīng)該
##被啟用:
##
#auth_mechanisms.1 = PLAIN
#auth_mechanisms.2 = AMQPLAIN
#auth_mechanisms.3 = EXTERNAL##要強(qiáng)制所有客戶端上基于x509證書的身份驗(yàn)證,
##排除所有其他機(jī)制(注意:這將禁用基于密碼的
##認(rèn)證甚至管理用戶界面!):
##
#auth_mechanisms.1 = EXTERNAL##這涉及rabbitmq-auth-mechanism-ssl插件和
## STOMP ssl_cert_login配置。查看RabbitMQ STOMP插件
##  稍后在此文件和README中的##配置部分
## https://github.com/rabbitmq/rabbitmq-auth-mechanism-ssl進(jìn)一步
## 細(xì)節(jié)。
##
##使用TLS證書的CN而不是DN作為用戶名
##
#ssl_cert_login_from = common_name## TLS握手超時(shí),以毫秒為單位。
##
#ssl_handshake_timeout = 5000##密碼散列實(shí)現(xiàn)。只會(huì)影響新的
##創(chuàng)建用戶。重新計(jì)算現(xiàn)有用戶的散列值
##有必要更新她的密碼。
##
##要使用SHA-512,請(qǐng)?jiān)O(shè)置為rabbit_password_hashing_sha512。
##
#password_hashing_module = rabbit_password_hashing_sha256##導(dǎo)入從早期版本導(dǎo)出的定義
##比3.6.0,有可能回到MD5(只做這個(gè)
##作為臨時(shí)措施!)通過將其設(shè)置為rabbit_password_hashing_md5。
##
#password_hashing_module = rabbit_password_hashing_md5##
##默認(rèn)用戶/ VHost
## ====================
####首先啟動(dòng)RabbitMQ將創(chuàng)建一個(gè)虛擬主機(jī)和一個(gè)用戶。這些
## config items控制創(chuàng)建的內(nèi)容。
##相關(guān)文檔指南:http://rabbitmq.com/access-control.html
##
#default_vhost = /
#default_user = guest
#default_pass = guest#default_permissions.configure =。*
#default_permissions.read =。*
#default_permissions.write =。*##默認(rèn)用戶的標(biāo)簽
##
##有關(guān)標(biāo)簽的更多詳細(xì)信息,請(qǐng)參閱文檔
##管理插件在http://rabbitmq.com/management.html。
##
#default_user_tags.administrator = true##定義這樣的其他標(biāo)簽:
#default_user_tags.management = true
#default_user_tags.custom_tag = true##
##其他網(wǎng)絡(luò)和協(xié)議相關(guān)的配置
## ================================================ =====
####設(shè)置默認(rèn)的AMQP 0-9-1心跳間隔(以秒為單位)。
##相關(guān)文檔指南:
##
## * http://rabbitmq.com/heartbeats.html
## * http://rabbitmq.com/networking.html
##
#心跳= 600##設(shè)置AMQP幀的最大允許大小(以字節(jié)為單位)。
##
#frame_max = 131072##設(shè)置連接前服務(wù)器將接受的最大幀大小
##調(diào)整發(fā)生
##
#initial_frame_max = 4096##設(shè)置每個(gè)連接的最大允許通道數(shù)量。
## 0的意思是“沒有限制”。
##
#channel_max = 128##自定義TCP監(jiān)聽器(套接字)配置。
##
##相關(guān)文檔指南:
##
## * http://rabbitmq.com/networking.html
## * http://www.erlang.org/doc/man/inet.html#setopts-2
###tcp_listen_options.backlog = 128
#tcp_listen_options.nodelay = true
#tcp_listen_options.exit_on_close = false##
##資源限制和流量控制
## ==============================
##
##相關(guān)文檔指南:http://rabbitmq.com/memory.html。##基于內(nèi)存的流量控制閾值。
##
#vm_memory_high_watermark.relative = 0.4##或者,我們可以設(shè)置節(jié)點(diǎn)使用的RAM的限制(以字節(jié)為單位)。
##
#vm_memory_high_watermark.absolute = 1073741824##或者您可以使用內(nèi)存單位設(shè)置絕對(duì)值(使用RabbitMQ 3.6.0+)。
##如果相對(duì)定義,絕對(duì)水印將被忽略!
##
#vm_memory_high_watermark.absolute = 2GB
##
##支持的單位后綴:
##
## kb,KB:kibibytes(2 ^ 10個(gè)字節(jié))
## mb,MB:mebibytes(2 ^ 20)
## gb,GB:gibibytes(2 ^ 30)##隊(duì)列開始的高水印限制的分?jǐn)?shù)
##尋呼消息到光盤為了釋放內(nèi)存。
##例如,當(dāng)vm_memory_high_watermark被設(shè)置為0.4并且該值被設(shè)置為0.5時(shí),
##分頁可以在節(jié)點(diǎn)使用總可用RAM的20%時(shí)開始。
##
##大于1.0的值可能是危險(xiǎn)的,應(yīng)謹(jǐn)慎使用。
##
##一個(gè)替代方案是使用持久隊(duì)列和發(fā)布消息
##作為永久(交付模式= 2)。有了這個(gè)組合隊(duì)列將
##將消息更快地移動(dòng)到磁盤。
##
##另一種選擇是配置隊(duì)列來尋呼所有消息(都是
##持久性和瞬態(tài))到磁盤
##盡可能參見http://rabbitmq.com/lazy-queues.html。
##
#vm_memory_high_watermark_paging_ratio = 0.5##選擇Erlang VM內(nèi)存消耗計(jì)算策略??梢允恰胺峙洹?#xff0c;“rss”或“l(fā)egacy”(別名為“erlang”),
##在3.6.11中介紹?!皉ss”是3.6.12的默認(rèn)值。
##查看https://github.com/rabbitmq/rabbitmq-server/issues/1223和rabbitmq / rabbitmq-common#224獲取背景信息。
#vm_memory_calculation_strategy = rss##我們執(zhí)行內(nèi)存檢查的間隔(以毫秒為單位)
##水平對(duì)水印。
##
#memory_monitor_interval = 2500##可用的總內(nèi)存可以從OS資源中計(jì)算出來
##  - 默認(rèn)選項(xiàng) - 或作為配置參數(shù)提供。
#total_memory_available_override_value = 2GB##設(shè)置磁盤空閑限制(以字節(jié)為單位)。一旦可用磁盤空間達(dá)到此目的
##下限,磁盤報(bào)警將被設(shè)置 - 請(qǐng)參閱文檔
##上面列出了更多的細(xì)節(jié)。
##
##如果相對(duì)定義,絕對(duì)水印將被忽略!
#disk_free_limit.absolute = 50000##或者你可以使用內(nèi)存單元(與vm_memory_high_watermark相同)
##與RabbitMQ 3.6.0+。
#disk_free_limit.absolute = 500KB
#disk_free_limit.absolute = 50mb
#disk_free_limit.absolute = 5GB##或者,我們可以設(shè)置一個(gè)相對(duì)于可用RAM總量的限制。
##
##低于1.0的值可能是危險(xiǎn)的,應(yīng)謹(jǐn)慎使用。
#disk_free_limit.relative = 2.0##
##聚類
## =====================
##
#cluster_partition_handling =忽略## pause_if_all_down策略需要額外的配置
#cluster_partition_handling = pause_if_all_down##恢復(fù)策略??梢允恰癮utoheal”或“忽略”
#cluster_partition_handling.pause_if_all_down.recover =忽略##節(jié)點(diǎn)名稱檢查
#cluster_partition_handling.pause_if_all_down.nodes.1 = rabbit @ localhost
#cluster_partition_handling.pause_if_all_down.nodes.2 = hare @ localhost##在消息中鏡像同步批量大小。增加這將加快速度
##同步,但批量總大小(以字節(jié)為單位)不得超過2 GiB。
##在RabbitMQ 3.6.0或更高版本中可用。
##
#mirroring_sync_batch_size = 4096##在啟動(dòng)時(shí)自動(dòng)進(jìn)行聚類。僅適用
##到第一次剛復(fù)位或啟動(dòng)的節(jié)點(diǎn)。
##
##相關(guān)文檔指南:http://rabbitmq.com//cluster-formation.html
###autocluster.peer_discovery_backend = rabbit_peer_discovery_classic_config
#
#autocluster.classic_config.nodes.node1 = rabbit1 @ hostname
#autocluster.classic_config.nodes.node2 = rabbit2 @ hostname
#autocluster.classic_config.nodes.node3 = rabbit3 @ hostname
#autocluster.classic_config.nodes.node4 = rabbit4 @ hostname##基于DNS的對(duì)等發(fā)現(xiàn)。這后端將列出A記錄
##配置的主機(jī)名##并執(zhí)行反向查找
##返回的地址。#autocluster.peer_discovery_backend = rabbit_peer_discovery_dns
#autocluster.dns.hostname = rabbitmq.discovery.mycompany.local##此節(jié)點(diǎn)的類型可以配置。如果你不確定
##使用什么節(jié)點(diǎn)類型,總是使用“光盤”。
#autocluster.node_type =光盤##發(fā)送Keepalive消息的間隔(以毫秒為單位)
##給其他集群成員。請(qǐng)注意,這不是一回事
## as net_ticktime; 遺漏的keepalive消息不會(huì)導(dǎo)致節(jié)點(diǎn)
##被認(rèn)為是失望的。
##
#cluster_keepalive_interval = 10000##
##統(tǒng)計(jì)收集
## =====================
####設(shè)置(內(nèi)部)統(tǒng)計(jì)信息收集粒度。
##
##可以不是,粗或細(xì)
#collect_statistics =無#collect_statistics =粗略##統(tǒng)計(jì)信息收集間隔(以毫秒為單位)。增加
##這將減少管理數(shù)據(jù)庫的負(fù)載。
##
#collect_statistics_interval = 5000##
##其他/高級(jí)選項(xiàng)
## =====================
##
##注意:只有在你明白自己在做什么的情況下才能改變這些!
####顯式啟用/禁用hipe編譯。
##
#hipe_compile = false##在等待群集中的Mnesia表時(shí)使用的超時(shí)
##變得可用。
##
#mnesia_table_loading_retry_timeout = 30000##在群集啟動(dòng)中等待Mnesia表時(shí)重試。注意
##此設(shè)置不適用于Mnesia升級(jí)或節(jié)點(diǎn)刪除。
##
#mnesia_table_loading_retry_limit = 10##以字節(jié)為單位的大小,低于該大小將消息嵌入到隊(duì)列索引中。
##相關(guān)文檔指南:http://rabbitmq.com/persistence-conf.html
##
#queue_index_embed_msgs_below = 4096##你也可以用內(nèi)存單位來設(shè)置這個(gè)大小
##
#queue_index_embed_msgs_below = 4kb##是否啟用所有的后臺(tái)定期GC
## Erlang處于“等待”狀態(tài)。
##
##禁用后臺(tái)GC可以減少客戶端操作的延遲,
##保持啟用可能會(huì)減少RAM的使用量。
##
#background_gc_enabled = false##運(yùn)行背景GC的目標(biāo)(期望)間隔(以毫秒為單位)。
##實(shí)際時(shí)間間隔取決于執(zhí)行時(shí)間的長短
##操作(可高于此間隔)。值小于
##不建議使用30000毫秒。
##
#background_gc_target_interval = 60000##是否啟用代理協(xié)議支持。
##一旦啟用,客戶端不能直接連接到代理
##了。他們必須通過一個(gè)負(fù)載均衡器連接發(fā)送
##代理協(xié)議頭在連接時(shí)間給代理。
##此設(shè)置僅適用于AMQP客戶端,其他協(xié)議
##像MQTT或STOMP這樣的##有自己的設(shè)置來啟用代理協(xié)議。
##請(qǐng)參閱插件文檔以獲取更多信息。
##
#proxy_protocol = false## ------------------------------------------------ ----------------------------
##高級(jí)的Erlang網(wǎng)絡(luò)/集群選項(xiàng)。
##
##相關(guān)文檔指南:http://rabbitmq.com/clustering.html
## ------------------------------------------------ ----------------------------#======================================
#內(nèi)核部分
#======================================#kernel.net_ticktime = 60## ------------------------------------------------ ----------------------------
## RabbitMQ管理插件
##
##相關(guān)文檔指南:http://rabbitmq.com/management.html。
## ------------------------------------------------ ----------------------------#=======================================
#管理部分
#=======================================##從以下JSON文件中預(yù)載模式定義。
##相關(guān)文檔指南:http://rabbitmq.com/management.html#load-definitions。
##
#management.load_definitions = /path/to/exported/definitions.json##將所有對(duì)管理HTTP API的請(qǐng)求記錄到一個(gè)文件中。
##
#management.http_log_dir = /path/to/access.log##更改HTTP偵聽器偵聽的端口,
##指定Web服務(wù)器綁定的接口。
##還要將偵聽器設(shè)置為使用TLS并提供TLS選項(xiàng)。
###management.listener.port = 15672
#management.listener.ip = 127.0.0.1
#management.listener.ssl = true#management.listener.ssl_opts.cacertfile = /path/to/cacert.pem
#management.listener.ssl_opts.certfile = /path/to/cert.pem
#management.listener.ssl_opts.keyfile = /path/to/key.pem##“基本”,“詳細(xì)”或“無”之一??吹?## http://rabbitmq.com/management.html#fine-stats了解更多詳情。
#management.rates_mode =基本##配置聚合數(shù)據(jù)的長度(如消息速率和隊(duì)列
##長度)被保留。請(qǐng)閱讀插件的文檔
## http://rabbitmq.com/management.html#configuration更多
## 細(xì)節(jié)。
##您可以使用“分鐘”,“小時(shí)”和“日”鍵或整數(shù)鍵(以秒為單位)
#management.sample_retention_policies.global.minute = 5
#management.sample_retention_policies.global.hour = 60
#management.sample_retention_policies.global.day = 1200#management.sample_retention_policies.basic.minute = 5
#management.sample_retention_policies.basic.hour = 60#management.sample_retention_policies.detailed.10 = 5## ------------------------------------------------ ----------------------------
## RabbitMQ鏟子插件
##
##相關(guān)文檔指南:http://rabbitmq.com/shovel.html
## ------------------------------------------------ ----------------------------## Shovel插件配置示例在additional.config文件中定義## ------------------------------------------------ ----------------------------
## RabbitMQ STOMP插件
##
##相關(guān)文檔指南:http://rabbitmq.com/stomp.html
## ------------------------------------------------ ----------------------------#=======================================
#STOMP部分
#=======================================##網(wǎng)絡(luò)配置。格式通常與核心代理相同。
##
#stomp.listeners.tcp.default = 61613##與ssl監(jiān)聽器相同
##
#stomp.listeners.ssl.default = 61614##將接受TCP連接的Erlang進(jìn)程的數(shù)量
##和TLS監(jiān)聽器。
##
#stomp.num_acceptors.tcp = 10
#stomp.num_acceptors.ssl = 1##其他TLS選項(xiàng)##使用TLS時(shí),從客戶端證書中提取名稱。
##
#stomp.ssl_cert_login = true##設(shè)置默認(rèn)的用戶名和密碼。這被用作默認(rèn)登錄
##每當(dāng)CONNECT框架省略登錄名和密碼頭。
##
##請(qǐng)注意,設(shè)置這將允許客戶端連接沒有
##驗(yàn)證!
##
#stomp.default_user = guest
#stomp.default_pass = guest##如果配置了默認(rèn)用戶,或者您已配置使用TLS客戶端
##證書為基礎(chǔ)的身份驗(yàn)證,您可以選擇允許客戶端
##完全忽略CONNECT幀。如果設(shè)置為true,則客戶端是
##自動(dòng)連接為默認(rèn)用戶或用戶提供的
##每當(dāng)在一個(gè)會(huì)話上發(fā)送的第一幀不是一個(gè)## TLS證書
##連接框架。
##
#stomp.implicit_connect = true##是否啟用代理協(xié)議支持。
##一旦啟用,客戶端不能直接連接到代理
##了。他們必須通過一個(gè)負(fù)載均衡器連接發(fā)送
##代理協(xié)議頭在連接時(shí)間給代理。
##此設(shè)置僅適用于STOMP客戶端,其他協(xié)議
##像MQTT或AMQP這樣的##有自己的設(shè)置來啟用代理協(xié)議。
##請(qǐng)參閱插件或代理文檔以獲取更多信息。
##
#stomp.proxy_protocol = false## ------------------------------------------------ ----------------------------
## RabbitMQ MQTT適配器
##
##見https://github.com/rabbitmq/rabbitmq-mqtt/blob/stable/README.md
##的細(xì)節(jié)
## ------------------------------------------------ ----------------------------#=======================================
#MQTT部分
#=======================================##設(shè)置默認(rèn)的用戶名和密碼。將被用作默認(rèn)登錄
##如果連接客戶端沒有提供其他登錄信息。
##
##請(qǐng)注意,設(shè)置這將允許客戶端連接沒有
##驗(yàn)證!
##
#mqtt.default_user = guest
#mqtt.default_pass = guest##啟用匿名訪問。如果這被設(shè)置為false,客戶端必須提供
##登錄信息才能連接。請(qǐng)參閱default_user / default_pass
##配置元素管理登錄沒有身份驗(yàn)證。
##
#mqtt.allow_anonymous = true##如果你有多個(gè)chosts,指定哪個(gè)
##適配器連接。
##
#mqtt.vhost = /##指定發(fā)布來自MQTT客戶端的消息的交換。
##
#mqtt.exchange = amq.topic##指定TTL(生存時(shí)間)來控制非干凈會(huì)話的生命周期。
##
#mqtt.subscription_ttl = 1800000##設(shè)置預(yù)取計(jì)數(shù)(控制未確認(rèn)的最大數(shù)量
##消息將被交付)。
##
#mqtt.prefetch = 10## TCP / SSL配置(按照代理配置)。
##
#mqtt.listeners.tcp.default = 1883##與ssl監(jiān)聽器相同
##
#mqtt.listeners.ssl.default = 1884##將接受TCP連接的Erlang進(jìn)程的數(shù)量
##和TLS監(jiān)聽器。
##
#mqtt.num_acceptors.tcp = 10
#mqtt.num_acceptors.ssl = 1## TCP偵聽器選項(xiàng)(按照代理配置)。
##
#mqtt.tcp_listen_options.backlog = 128
#mqtt.tcp_listen_options.nodelay = true##是否啟用代理協(xié)議支持。
##一旦啟用,客戶端不能直接連接到代理
##了。他們必須通過一個(gè)負(fù)載均衡器連接發(fā)送
##代理協(xié)議頭在連接時(shí)間給代理。
##此設(shè)置僅適用于STOMP客戶端,其他協(xié)議
##像STOMP或AMQP有自己的設(shè)置來啟用代理協(xié)議。
##請(qǐng)參閱插件或代理文檔以獲取更多信息。
##
#mqtt.proxy_protocol = false## ------------------------------------------------ ----------------------------
## RabbitMQ AMQP 1.0支持
##
##見https://github.com/rabbitmq/rabbitmq-amqp1.0/blob/stable/README.md。
## ------------------------------------------------ ----------------------------#=======================================
#AMQP 1.0部分
#=======================================##未通過SASL認(rèn)證的連接將以此連接
##帳戶。請(qǐng)參閱自述文件以獲取更多信息。
##
##請(qǐng)注意,設(shè)置這將允許客戶端連接沒有
##驗(yàn)證!
##
#amqp1_0.default_user = guest##啟用協(xié)議嚴(yán)格模式。請(qǐng)參閱自述文件以獲取更多信息。
##
#amqp1_0.protocol_strict_mode = false## Lager控制記錄。
##請(qǐng)參閱https://github.com/basho/lager獲取更多文檔
##
## Log direcrory,默認(rèn)情況下取自RABBITMQ_LOG_BASE env變量。
##
#log.dir = / var / log / rabbitmq##記錄到控制臺(tái)(可以為true或false)
##
#log.console = false## Loglevel登錄到控制臺(tái)
##
#log.console.level = info##記錄到文件??梢允羌俚幕蛭募?。
##默認(rèn):
#log.file = rabbit.log## 把關(guān)掉:
#log.file = false## Loglevel記錄到文件
##
#log.file.level = info##文件旋轉(zhuǎn)配置。沒有旋轉(zhuǎn)的defualt。
##不要將旋轉(zhuǎn)日期設(shè)置為“”。如果需要“”值,請(qǐng)保持不變
#log.file.rotation.date = $ D0
#log.file.rotation.size = 0## QA:配置系統(tǒng)日志記錄
#log.syslog = false
#log.syslog.identity = rabbitmq
#log.syslog.level = info
#log.syslog.facility =守護(hù)進(jìn)程## ------------------------------------------------ ----------------------------
## RabbitMQ LDAP插件
##
##相關(guān)文檔指南:http://rabbitmq.com/ldap.html。
##
## ------------------------------------------------ ----------------------------#=======================================
#LDAP部分
#=======================================##
##連接到LDAP服務(wù)器
## ================================
####指定要綁定的服務(wù)器。你*必須*設(shè)置為了插件
##正常工作。
##
#auth_ldap.servers.1 =你的服務(wù)器名稱在這里##您可以定義多個(gè)服務(wù)器
#auth_ldap.servers.2 =你的其他服務(wù)器##使用TLS連接到LDAP服務(wù)器
##
#auth_ldap.use_ssl = false##指定要連接的LDAP端口
##
#auth_ldap.port = 389## LDAP連接超時(shí),以毫秒或“無限”
##
#auth_ldap.timeout =無限##或號(hào)碼
#auth_ldap.timeout = 500##啟用LDAP查詢的記錄。
##其中之一
##  -  false(不記錄)
##  -  true(詳細(xì)記錄插件使用的邏輯)
##  - 網(wǎng)絡(luò)(如同,但另外記錄LDAP網(wǎng)絡(luò)流量)
##
##默認(rèn)為false。
##
#auth_ldap.log = false##也可以是真實(shí)的或網(wǎng)絡(luò)
#auth_ldap.log = true
#auth_ldap.log =網(wǎng)絡(luò)##
##認(rèn)證
## ==============
####模式將通過AMQP給出的用戶名轉(zhuǎn)換為DN
## 捆綁
##
#auth_ldap.user_dn_pattern = cn = $ {username},ou = People,dc = example,dc = com##或者,您可以將用戶名轉(zhuǎn)換為Distinguished
##綁定后通過LDAP查找命名。請(qǐng)參閱文檔
##全部細(xì)節(jié)。##通過查找將用戶名轉(zhuǎn)換為dn時(shí),將其設(shè)置為
##表示用戶名的屬性的名稱,而查找查詢的
##base DN。
##
#auth_ldap.dn_lookup_attribute = userPrincipalName
#auth_ldap.dn_lookup_base = DC = gopivotal,DC = com##控制如何綁定授權(quán)查詢,也可以
##檢索登錄用戶的詳細(xì)信息,而不顯示一個(gè)
##密碼(例如,SASL EXTERNAL)。
##其中之一
##  -  as_user(作為認(rèn)證用戶進(jìn)行綁定 - 需要密碼)
##  - 匿名(匿名綁定)
##  -  {UserDN,Password}(用指定的用戶名和密碼綁定)
##
##默認(rèn)為'as_user'。
##
#auth_ldap.other_bind = as_user##或者可以更復(fù)雜:
#auth_ldap.other_bind.user_dn =用戶
#auth_ldap.other_bind.password =密碼##如果user_dn和密碼定義 - 其他選項(xiàng)被忽略。#-----------------------------
#太復(fù)雜的LDAP部分
#-----------------------------##
##授權(quán)
## =============
#### LDAP插件可以針對(duì)您的應(yīng)用程序執(zhí)行各種查詢
## LDAP服務(wù)器來確定授權(quán)的問題。
##
##相關(guān)文檔指南:http://rabbitmq.com/ldap.html#authorisation。##以下配置應(yīng)該在additional.config文件中定義
##不要處理這條線!##將查詢?cè)O(shè)置為在確定訪問虛擬主機(jī)時(shí)使用
##
## {vhost_access_query,{in_group,
##“ou = $ {vhost} -users,ou = vhosts,dc = example,dc = com”}}##設(shè)置查詢以在確定資源(例如,隊(duì)列)訪問時(shí)使用
##
## {resource_access_query,{constant,true}},##設(shè)置查詢來確定用戶擁有哪些標(biāo)簽
##
## {tag_queries,[]}
#]},
#-----------------------------

2.8、參數(shù)及策略

????????RabbitMQ 絕大大多數(shù)的配置都可以通過修改rabbitrnq.config 配置文件來完成,但是其中有些配置并不太適合在rabbitrnq.config 中去實(shí)現(xiàn)。比如某項(xiàng)配置不需要同步到集群中的其他節(jié)點(diǎn)中,或者某項(xiàng)配置需要在運(yùn)行時(shí)更改,因?yàn)閞abbitrnq.config 需要重啟Broker 才能生效。這種類型的配置在RabbitMQ 中的另一種稱呼為參數(shù)(P缸ameter) ,也可以稱之為運(yùn)行時(shí)參數(shù)(Runtime Parameter) 。英文中的"arguments" 也翻譯為參數(shù),比如channel .basicPublish 方法中的參數(shù)就是指"arguments",為了與之能夠有效地區(qū)分,后邊都使用 Parameter 或者 Runtime Parameter 的稱謂來進(jìn)行相應(yīng)的闡述。

????????Parameter 可以通過rabbitrnqctl 工具或者RabbitMQ Management 插件提供的HTTP API接口來設(shè)置。RabbitMQ 中一共有兩種類型的Parameter: vhost 級(jí)別的Parameter 和global 級(jí)別的Parameter。vhost 級(jí)別的Parameter 由一個(gè)組件名稱(component name) 、名稱(name) 和值
( value) 組成,而global 級(jí)別的參數(shù)由一個(gè)名稱和值組成,不管是vhost 級(jí)別還是global 級(jí)別的
參數(shù),其所對(duì)應(yīng)的值都是JSON 類型的。舉例來說, Federation upstream 是一個(gè)vhost 級(jí)別的
Parameter ,它用來定義Federation link 的上游信息,其對(duì)應(yīng)的Parameter 的組件名稱為
" federation-upstream" 名稱對(duì)應(yīng)于其自身的名稱,而值對(duì)應(yīng)于與上游的相關(guān)的連接參數(shù)等;對(duì)
于Shovel 而言也可以通過Parameter 設(shè)置,其對(duì)應(yīng)組件名稱為"shovel"

????????vhost 級(jí)別的參數(shù)對(duì)應(yīng)的 rabbitmq 相關(guān)的命令有三種: set_pararneter 、list_parameters 和clear_parameter。


rabbitmqctl set_parameter [-p vhost] {component_name} {name} {value}

????????用來設(shè)置一個(gè)參數(shù)。示例如下(例子中演示的Federation upstream 的Parameter 設(shè)置, 需要
先開啟rabbitmq federation 插件) :

[root@myblnp ~]# rabbitmq-plugins enable rabbitmq_federation
Enabling plugins on node rabbit@myblnp:
rabbitmq_federation
The following plugins have been configured:rabbitmq_federationrabbitmq_managementrabbitmq_management_agentrabbitmq_web_dispatch
Applying plugin configuration to rabbit@myblnp...
The following plugins have been enabled:rabbitmq_federationstarted 1 plugins.
[root@myblnp ~]# 

使用 Rabbitmq_federation 插件設(shè)置參數(shù):

[root@myblnp ~]# rabbitmqctl set_parameter federation-upstream f1 '{"uri":"amqp://root:root123@192.168.56.106:5672","ack-mode":"on-confirm"}'
Setting runtime parameter "f1" for component "federation-upstream" to "{"uri":"amqp://root:root123@192.168.56.106:5672","ack-mode":"on-confirm"}" in vhost "/" ...
[root@myblnp ~]#

rabbitmqctllist_parameters [-p vhost]

#用來列出指定虛擬主機(jī)上所有的Parameter?

[root@myblnp ~]# rabbitmqctl list_parameters -p /
Listing runtime parameters for vhost "/" ...
component       name    value
federation-upstream     f1      {"ack-mode":"on-confirm","uri":"amqp://root:root123@192.168.56.106:5672"}
[root@myblnp ~]# 

rabbitmqctl clear_parameter [-p vhost] {componenet_name} {key}
#用來清除指定的參數(shù)

[root@myblnp ~]# rabbitmqctl clear_parameter -p / federation-upstream f1
Clearing runtime parameter "f1" for component "federation-upstream" on vhost "/" ...
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl list_parameters -p /
Listing runtime parameters for vhost "/" ...[root@myblnp ~]# 

與rabbitmqctl 工具相對(duì)應(yīng)的HTTP API 接口如下所述:

  • 設(shè)置一個(gè)參數(shù): PUT /api/parameters/{componenet_name}/vhost/name
  • 清除一個(gè)參數(shù): DELETE? /api/parameters/{componenet_name}/vhost/name
  • 列出指定vhost 中的所有參數(shù): GET /api/parameters

global 級(jí)別的 Parameter 操作

方式詳細(xì)內(nèi)容
rabbitmqctlrabbitmqctl set_global_parameter name value
rabbitmqctl list_global_parameters
rabbitmqctl clear_global_parameter name
HTTP API 接口PUT /api/global-parameters/name
DELETE /api/global-parameters/name
GET /api/global-parameters/
[root@myblnp ~]# rabbitmqctl list_global_parameters
Listing global runtime parameters ...
name    value
cluster_name    "myblnps"
internal_cluster_id     "rabbitmq-cluster-id-jpA-C8h6S2NRi300jibXlQ"
[root@myblnp ~]# 
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl set_global_parameter name1 '{}'
Setting global runtime parameter "name1" to "{}" ...
[root@myblnp ~]# 
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl list_global_parameters
Listing global runtime parameters ...
name    value
cluster_name    "myblnps"
internal_cluster_id     "rabbitmq-cluster-id-jpA-C8h6S2NRi300jibXlQ"
name1   []
[root@myblnp ~]# rabbitmqctl clear_global_parameter name1
Clearing global runtime parameter "name1" ...
[root@myblnp ~]# 
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl list_global_parameters
Listing global runtime parameters ...
name    value
cluster_name    "myblnps"
internal_cluster_id     "rabbitmq-cluster-id-jpA-C8h6S2NRi300jibXlQ"
[root@myblnp ~]# 

????????除了一些固定的參數(shù)(比如durable 或者exclusive) ,客戶端在創(chuàng)建交換器或者隊(duì)列的時(shí)候可以配置一些可選的屬性參數(shù)來獲得一些不同的功能,比如x-message-ttl 、x-expires 、x-max-length 等。通過客戶端設(shè)定的這些屬性參數(shù)一旦設(shè)置成功就不能再改變(不能修改也不能添加),除非刪除原來的交換器或隊(duì)列之后再重新創(chuàng)建新的。

????????Policy 的介入就可以很好的解決這類問題,它是一種特殊的Parameter 的用法。Policy 是vhost 級(jí)別的。一個(gè)Policy 可以匹配一個(gè)或者多個(gè)隊(duì)列(或者交換器,或者兩者兼有),這樣便于批量管理。與此同時(shí),Policy 也可以支持動(dòng)態(tài)地修改一些屬性參數(shù), 大大地提高了應(yīng)用的靈活度。一般來說, Policy 用來配置Federation 、鏡像、備份交換器、死信等功能。

????????rabbitmq_managemet 插件本身就提供了Policy 的支持??梢栽?#34;Admin" -> "Policies "
-> "Add / update a policy" 中添加一個(gè)Policy 。包含以下幾個(gè)參數(shù):

  • Virtual host: 表示當(dāng)前Policy 所在的vhost 是哪個(gè)。
  • Name : 表示當(dāng)前Policy 的名稱
  • Pattern: 一個(gè)正則表達(dá)式,用來匹配相關(guān)的隊(duì)列或者交換器
  • Apply to : 用來指定當(dāng)前Policy 作用于哪一方。一共有三個(gè)選項(xiàng)"Exchanges and queues" 表示作用與Pattern 所匹配的所有隊(duì)列和交換器; "Exchanges" 表示作用于與Pattern 所匹配的所有交換器; "Queues" 表示作用于與Pattern 所匹配的所有隊(duì)列
  • Priority: 定義優(yōu)先級(jí)。如果有多個(gè)Policy 作用于同一個(gè)交換器或者隊(duì)列,那么Priority 最大的那個(gè)Policy 才會(huì)有用
  • Definition: 定義一組或者多組鍵值對(duì),為匹配的交換器或者隊(duì)列附加相應(yīng)的功能

????????作為一種Paramter,Policy 也可以通過rabbitmqctl 工具或者HTTP API 接口來操作。與前面所講的Parameter 對(duì)應(yīng), rabbitmqctl 工具或者HTTP API 接口各種都有set 、clear 和list的功能。

rabbitmqctl set_policy [-p vhost] [--priority priority] [--apply-to apply-to] {name} {pattern}
{definition}

#用來設(shè)置一個(gè)Policy。其中的參數(shù)name 、patte口和definition 是必填項(xiàng)

#示例如下,設(shè)置默認(rèn)的vhost 中所有以"^amq." 開頭的交換器為聯(lián)邦交換器:
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl set_policy --apply-to exchanges --priority 1 p1 "^amq." '{"federation-upstream":"f1"}'
Setting policy "p1" for pattern "^amq." to "{"federation-upstream":"f1"}" with priority "1" for vhost "/" ...
[root@myblnp ~]# 
[root@myblnp ~]# #對(duì)應(yīng)的HTTP API 接口調(diào)用為:
[root@myblnp ~]# curl -i -u root:root123 -XPUT -d '{"pattern":"^amq\.","definition":{"federation-upstream":"f2"},"priority":2,"apply-to":"exchanges"}' http://192.168.56.106:15672/api/policies/%2F/p2
HTTP/1.1 201 Created
content-length: 0
content-security-policy: script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'
date: Tue, 17 Oct 2023 02:52:49 GMT
server: Cowboy
vary: accept, accept-encoding, origin[root@myblnp ~]# 

rabbitmqctl list_policies [-p vhost]

#列出默認(rèn)vhost 中所有的Policy

[root@myblnp ~]# rabbitmqctl list_policies
Listing policies for vhost "/" ...
vhost   name    pattern apply-to        definition      priority
/       AE2     ^exchange_demo$ all     {"alternate-exchange":"myAE"}   0
/       p1      ^amq.   exchanges       {"federation-upstream":"f1"}    1
/       p2      ^amq\.  exchanges       {"federation-upstream":"f2"}    2
[root@myblnp ~]# 
[root@myblnp ~]# #HTTP API 接口查詢
[root@myblnp ~]# curl -i -u root:root123 -XGET http://192.168.56.106:15672/api/policies/%2F
HTTP/1.1 200 OK
cache-control: no-cache
content-length: 375
content-security-policy: script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'
content-type: application/json
date: Tue, 17 Oct 2023 02:56:03 GMT
server: Cowboy
vary: accept, accept-encoding, origin[{"vhost":"/","name":"AE2","pattern":"^exchange_demo$","apply-to":"all","definition":{"alternate-exchange":"myAE"},"priority":0},{"vhost":"/","name":"p1","pattern":"^amq.","apply-to":"exchanges","definition":{"federation-upstream":"f1"},"priority":1},{"vhost":"/","name":"p2","pattern":"^amq\\.","apply-to":"exchanges","definition":{"federation-upstream":"f2"},"priority":2}][root@myblnp ~]# 
[root@myblnp ~]# 
[root@myblnp ~]# 

rabbitmqctl clear_policy [-p vhost] {name}

#清除指定的Policy

[root@myblnp ~]# rabbitmqctl clear_policy p1
Clearing policy "p1" on vhost "/" ...
[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl list_policies
Listing policies for vhost "/" ...
vhost   name    pattern apply-to        definition      priority
/       AE2     ^exchange_demo$ all     {"alternate-exchange":"myAE"}   0
/       p2      ^amq\.  exchanges       {"federation-upstream":"f2"}    2
[root@myblnp ~]# 
[root@myblnp ~]# 
[root@myblnp ~]# curl -i -u root:root123 -XDELETE http://192.168.56.106:15672/api/policies/%2F/p2
HTTP/1.1 204 No Content
content-security-policy: script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'
date: Tue, 17 Oct 2023 02:58:47 GMT
server: Cowboy
vary: accept, accept-encoding, origin[root@myblnp ~]# 
[root@myblnp ~]# rabbitmqctl list_policies
Listing policies for vhost "/" ...
vhost   name    pattern apply-to        definition      priority
/       AE2     ^exchange_demo$ all     {"alternate-exchange":"myAE"}   0
[root@myblnp ~]# 

特別注意:如果兩個(gè)或多個(gè)Policy 都作用到同一個(gè)交換器或者隊(duì)列上,且這些Policy 的優(yōu)先級(jí)都是一樣的,則參數(shù)項(xiàng)最多的Policy 具有決定權(quán)。如果參數(shù)一樣多,則最后添加的Policy 具有決定權(quán)。

?

http://www.risenshineclean.com/news/49379.html

相關(guān)文章:

  • 廣東建設(shè)工程執(zhí)業(yè)資格注冊(cè)中心網(wǎng)站搜索引擎大全排行榜
  • 可以做超鏈接或錨文本的網(wǎng)站有哪些seo怎么做?
  • 百色做網(wǎng)站百度搜索推廣費(fèi)用
  • 企業(yè)網(wǎng)站官網(wǎng)制作建網(wǎng)站公司哪里好
  • 四川網(wǎng)站開發(fā)哪家好廣告開戶南京seo
  • 湛江做網(wǎng)站的公司搜索引擎優(yōu)化的定義是什么
  • 網(wǎng)站建設(shè)頁面生成西安網(wǎng)絡(luò)推廣
  • 網(wǎng)站用什么技術(shù)做的百度霸屏培訓(xùn)
  • 做app模板網(wǎng)站深圳seo教程
  • 凡客軟件網(wǎng)站關(guān)鍵詞免費(fèi)優(yōu)化
  • 龍采做網(wǎng)站要多少錢網(wǎng)絡(luò)推廣和競(jìng)價(jià)怎么做
  • 一個(gè)人做網(wǎng)站難嗎seo優(yōu)化標(biāo)題
  • 家庭做網(wǎng)站seo排名優(yōu)化聯(lián)系13火星軟件
  • 長沙網(wǎng)站建設(shè)建百度廣告投放價(jià)格表
  • 網(wǎng)站是怎么做的嗎營銷培訓(xùn)心得體會(huì)
  • 做動(dòng)態(tài)網(wǎng)站有哪些技術(shù)路線seo網(wǎng)站推廣教程
  • wordpress跳轉(zhuǎn)外部鏈接網(wǎng)絡(luò)優(yōu)化大師
  • 云南做網(wǎng)站價(jià)格雅思培訓(xùn)班價(jià)格一般多少
  • 華為榮耀手機(jī)最新款長沙關(guān)鍵詞優(yōu)化新報(bào)價(jià)
  • 在線視頻直播網(wǎng)站建設(shè)新聞營銷發(fā)稿平臺(tái)
  • 紹興免費(fèi)自助建站鄭州seo外包顧問熱狗
  • 做網(wǎng)站用到的單詞關(guān)鍵詞seo優(yōu)化公司
  • 浙江省建設(shè)廳網(wǎng)站地址廣州網(wǎng)站優(yōu)化服務(wù)
  • 醫(yī)院網(wǎng)站建設(shè)要求seo自學(xué)網(wǎng)免費(fèi)
  • 怎么能讓網(wǎng)站排名靠前百度站長平臺(tái)快速收錄
  • 泰州網(wǎng)站建設(shè)服務(wù)熱線寧德市委書記
  • 傳奇網(wǎng)站傳奇寧波優(yōu)化seo是什么
  • 紹興建站模板系統(tǒng)網(wǎng)站關(guān)鍵詞如何快速上首頁
  • 自己做圖片網(wǎng)站競(jìng)價(jià)排名服務(wù)
  • 網(wǎng)站上傳不了照片市場(chǎng)調(diào)研方法有哪幾種