Rabbitmq的簡單概述和原始碼部署
一、 RabbitMQ概述
1.1 基本概述
RabbitMQ是一種訊息中介軟體,能夠很好的處理來自客戶端的非同步訊息傳送及請求,將訊息傳送放入到服
務端的佇列池中,而接收端可以根據RabbitMQ配置的轉發機制接收和過濾服務端轉發來的訊息。RabbitMQ
可以根據指定的訊息轉發規則進行訊息的轉發、緩衝和持久化操作,RabbitMQ主要用在多伺服器間或單
伺服器的子系統間進行通訊,是分散式系統標準的配置。
同時它支援多個訊息傳遞協議。RabbitMQ可以部署在分散式配置中,以滿足高彈性、高可用性需求。
1.2 基本原理
http://www.rabbitmq.com/getstarted.html
佇列、生產者、消費者
佇列是RabbitMQ的內部物件,用於儲存訊息。生產者(下圖中的P)生產訊息並投遞到佇列中,消費者
(下圖中的C)可以從佇列中獲取訊息並消費。
In the diagram below, "P" is our producer and "C" is our consumer. The box in the middle is a
queue - a message buffer that RabbitMQ keeps on behalf of the consumer.
Work Queues
多個消費者可以訂閱同一個佇列在這種模式下,RabbitMQ會預設把P發的訊息依次分發給各個消費者
(C),跟負載均衡差不多,而不是每個消費者都收到所有的訊息並處理
Exchange、Binding
剛才我們看到生產者將訊息投遞到佇列中,實際上這在RabbitMQ中這種事情永遠都不會發生。實際的情
況是,生產者將訊息傳送到Exchange(交換器,下圖中的X),再通過Binding將Exchange與Queue關聯起來。
Exchange在定義的時候是有型別的,以決定到底是哪些Queue符合條件,可以接收訊息
Exchange Type、Bingding key、routing key
在繫結(Binding)Exchange與Queue的同時,一般會指定一個binding key。在繫結多個Queue
到同一個Exchange的時候,這些Binding允許使用相同的binding key。
生產者在將訊息傳送給Exchange的時候,一般會指定一個routing key,來指定這個訊息的路由規則,
生產者就可以在傳送訊息給Exchange時,通過指定routing key來決定訊息流向哪裡。
RabbitMQ常用的Exchange Type有四種:fanout、direct、topic、headers
fanout: 所有bind到此exchange的queue都可以接收訊息
direct: 通過routingKey和exchange決定的那個唯一的queue可以接收訊息
topic: 所有符合routingKey(此時可以是一個表示式)的routingKey所bind的queue可以接收訊息
headers: 通過headers 來決定把訊息發給哪些queue (一般不用)
表示式符號說明:#代表一個或多個字元,*代表任何字元
例:#.a會匹配a.a,aa.a,aaa.a等
*.a會匹配a.a,b.a,c.a等
注:使用RoutingKey為#,Exchange Type為topic的時候相當於使用fanout
二、 基礎環境安裝
安裝rabbitmq需依賴erlang環境
2.1 基礎編譯說明
安裝包說明:
mq: rabbitmq-server-generic-unix-3.7.7.tar.xz
erlang: otp_src_20.3.tar.gz
Below is the list of dependencies of RabbitMQ server as of 3.7.x:
erlang >= 19.3. Erlang can installed from a number of repositories
erlang原始碼下載地址:
http://erlang.org/download/otp_src_20.3.tar.gz
2.2 erlang編譯安裝
2.2.1 安裝基礎依賴編譯環境
yum -y install gcc gcc-c++ m4 ncurses-devel openssl-devel unixODBC unixODBC-devel
2.2.2 編譯安裝erlang
cd otp_src_20.3
./configure --prefix=/usr/local/erlang \
--with-ssl \
--enable-threads \
--enable-kernel-poll \
--enable-hipe
make && make install
2.2.3 加入環境變數
vim /etc/profile
PATH=$PATH: /usr/local/erlang/bin
export $PATH
source /etc/profile
三、 安裝配置RabbitMQ
3.1 建立執行賬戶
useradd rabbitmq
passwd rabbitmq
3.2 安裝RabbitMQ
下載地址
tar -xJf rabbitmq-server-generic-unix-3.7.7.tar.xz
將安裝包部署到/opt目錄
mv rabbitmq_server-3.7.7 /opt/ rabbitmq
加入全域性系統環境變數,也可以加入應用賬戶自己的環境變數中
vim /etc/profile
PATH=$PATH: /usr/local/erlang/bin: /opt/ rabbitmq/sbin
export $PATH
source /etc/profile
3.3 配置RabbitMQ
http://www.rabbitmq.com/admin-guide.html # 所有配置指導
http://www.rabbitmq.com/documentation.html #所有配置文件
http://www.rabbitmq.com/configure.html#configuration-files #官方配置說明
預設rabbitmq沒有提供配置檔案,自行建立
配置資訊的配置檔案: /opt/rabbitmq/etc/rabbitmq/rabbitmq.conf
環境變數的配置檔案: /opt/rabbitmq/etc/rabbitmq/rabbitmq-env.conf
配置模板下載: https://github.com/rabbitmq/rabbitmq-server/tree/master/docs
3.3.1 建立資料儲存和日誌存放路徑
預設的資料儲存路徑和日誌路徑在/opt/rabbitmq/var下,我已經刪除了,自行定義
注意:伺服器設定為以系統使用者rabbitmq執行 。如果更改節點資料庫或日誌的位置,則必須確保檔案由該使用者所有
建立獨立配置資料儲存和日誌存放路徑
mkdir /opt/rabbitmq/{data,logs}
定義/opt/rabbitmq/etc/rabbitmq/rabbitmq-env.conf環境變數,rabbitmq啟動時從配置中讀取路徑引數
不依賴系統自定義變數
RABBITMQ_NODENAME=rabbit_node1 #自行定義
RABBITMQ_HOME=/opt/rabbitmq
RABBITMQ_CONFIG_FILE=${RABBITMQ_HOME}/etc/rabbitmq/rabbitmq
RABBITMQ_LOG_BASE=${RABBITMQ_HOME}/logs
RABBITMQ_MNESIA_BASE=${RABBITMQ_HOME}/data/mnesia
RABBITMQ_ENABLED_PLUGINS_FILE=${RABBITMQ_HOME}/etc/rabbitmq/enabled_plugins
RABBITMQ_GENERATED_CONFIG_DIR=${RABBITMQ_HOME}/data/config
RABBITMQ_ADVANCED_CONFIG_FILE=${RABBITMQ_HOME}/etc/rabbitmq/advanced
RABBITMQ_SCHEMA_DIR=${RABBITMQ_HOME}/data/schema
RABBITMQ_PLUGINS_DIR=${RABBITMQ_HOME}/plugins
RABBITMQ_PID_FILE=${RABBITMQ_HOME}/logs/rabbitmq.pid
3.3.2 修改配置調整引數
參考 http://www.rabbitmq.com/production-checklist.html
修改/opt/rabbitmq/etc/rabbitmq/rabbitmq.conf
num_acceptors.tcp = 15
接受TCP偵聽器連線的Erlang程序數。Default: 10,根據業務自行調整
reverse_dns_lookups = false 關閉dns反向解析,預設true
#資源限制和流控
如果沒有足夠的空閒系統記憶體,將會對作業系統交換造成不利影響,甚至會導致RabbitMQ程序終止
vm_memory_high_watermark.relative = 0.6
#The recommended vm_memory_high_watermark range is 0.40 to 0.66
#Values above 0.7 are not recommended. The OS and file system must be left with at least 30% of the
#memory, otherwise performance may degrade severely due to paging
tcp_listen_options.backlog = 1024 預設128, tcp偵聽佇列根據併發量自行調整
#日誌配置
log.dir = /opt/rabbitmq/logs
log.file = rabbit.log
log.file.level = info
#其他調優引數根據併發量自行調整,沒有特殊要求預設引數即可
3.3.3 開啟檔案控制代碼設定
Make sure your environment allows for at least 50K open file descriptors for effective
RabbitMQ user, including in development environments.
# vim /etc/security/limits.conf
rabbitmq soft nofile 65535
rabbitmq hard nofile 65535
3.3.4 RabbitMQ啟動與停止
啟動rabbitmq:rabbitmq-server start
關閉rabbitmq: rabbitmqctl stop
需要注意的是,此時不僅關閉了Rabbit應用程式,同時也關閉了Erlang節點。有時候我們只想關閉
Rabbit 應用程式,而保留Erlang節點繼續為其它程式服務(特別是在叢集或分散式環境中,一個Erlang
節點上可能同時執行著其它的Erlang程式,所以這樣的關閉節點是不可取的)
我們只需要使用./rabbitmqctl stop_app即可只關閉執行著的Rabbit程式,如下:
RabbitMQ後臺執行
3.3.5 使用者管理
刪除預設使用者(安全原因)
rabbitmqctl delete_user guest
建立業務連線賬戶
語法: rabbitmqctl add_user Username Password
修改使用者的密碼
語法: rabbitmqctl change_password Username Newpassword
檢視使用者
3.3.6 角色管理
在RabbitMQ中,角色致分為超級管理員、監控者、策略制定者、普通管理者以及其他
http://www.rabbitmq.com/management.html #官方文件
(1) 超級管理員(administrator)
可登陸管理控制檯(啟用managementplugin的情況下),可檢視所有的資訊,並且可以對使用者,策
略(policy)進行操作。
(2) 監控者(monitoring)
可登陸管理控制檯(啟用managementplugin的情況下),同時可以檢視rabbitmq節點的相關資訊(進
程數,記憶體使用情況,磁碟使用情況等)
(3) 策略制定者(policymaker)
可登陸管理控制檯(啟用managementplugin的情況下),同時可以對policy進行管理。但無法檢視
節點的相關資訊
(4) 普通管理者(management)
僅可登陸管理控制檯(啟用managementplugin的情況下),無法看到節點資訊,也無法對策略進行
管理。
(5) 其他
無法登陸管理控制檯,通常就是普通的生產者和消費者。
設定使用者角色
語法:rabbitmqctl set_user_tags Username administrator
操作前paytest使用者未被指定角色
操作後paytest角色
3.3.7 許可權管理
當系統只給特地的業務使用時,可以使用系統預設的vhost ,預設為/。建議根據業務命名vhost
新增虛擬主機:rabbitmqctl add_vhost vhost_name
刪除虛擬主機:rabbitmqctl delete_vhost vhost_name
檢視虛擬主機
設定許可權
下面就以給使用者paytest賦予訪問控制的讀、寫及配置許可權為例,開通遠端連線
語法:rabbitmqctl set_permissions -p vhost_name Username “.*” “.*” “.*”
檢視使用者許可權
語法: rabbitmqctl list_permissions -p vhost_name
刪除許可權
語法:rabbitmqctl clear_permissions -p vhost_name Username
NOTE:
-p pay:代表set_permissions控制條目應該應用到哪個vhost上;
paytest:代表被授權的使用者名稱字;
“.*” “.*” “.*”:分別代表配置、讀和寫許可權,而其中的”.*”為正則表示式,代表匹配所有許可權
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
使用者僅能對其所能訪問的virtual hosts中的資源進行操作。這裡的資源指的是virtual hosts中的
exchanges、queues等,操作包括對資源進行配置、寫、讀。配置許可權可建立、刪除、資源並修改
資源的行為,寫許可權可向資源傳送訊息,讀許可權從資源獲取訊息。
² exchange和queue的declare與delete分別需要exchange和queue上的配置許可權
² exchange的bind與unbind需要exchange的讀寫許可權
² queue的bind與unbind需要queue寫許可權exchange的讀許可權
² 發訊息(publish)需exchange的寫許可權
² 獲取或清除(get、consume、purge)訊息需queue的讀許可權
3.3.8 服務維護統計
http://www.rabbitmq.com/management.html #官方文件
http://www.rabbitmq.com/monitoring.html #官方文件
Note:
多節點,一定要做時間同步,確保每個節點時間一致
如果我們需要檢視資料的統計情況,那麼就需要一些樣板資料,所以我們需要建立個佇列,並將隊
列與交換機或轉發器進行繫結,使產生些資料供檢視統計(目前佇列沒有資料,看到是空的)
檢視佇列
檢視預設虛擬機器上所有的佇列列表(list_queues):rabbitmqctl list_queues
檢視虛擬機器上佇列的名字、訊息數目、消費者數目及記憶體使用情況:
從網上擷取例子:
可以檢視佇列宣告時的屬性特徵,具體如下
檢視交換機
我們查看了交換機的名字、型別、是否持久化及是否會被系統自動刪除等資訊。
檢視繫結到交換機的佇列
目前沒有資料
附錄A
1、 RabbitMQ埠說明
4369:epmd,RabbitMQ節點和CLI工具使用的對等發現服務
5672,5671:AMQP 0-9-1和1.0客戶端使用沒有和使用TLS
25672:用於節點間和CLI工具通訊(Erlang分發伺服器埠)並從動態範圍分配(預設情況下限
於單個埠,計算為AMQP埠+ 20000)。除非確實需要這些埠上的外部連線(例如,
群集使用聯合或CLI工具在子網外的計算機上使用),否則不應公開這些埠。有關詳情, 請
參閱網路指南
35672-35682:由CLI工具(Erlang分發客戶端埠)用於與節點通訊,並從動態範圍(計算為服
務器分發埠+ 10000到伺服器分發埠+ 10010)進行分配。有關詳情, 請參閱網路指南
15672:HTTP API客戶端,管理UI和rabbitmqadmin(僅當啟用了管理外掛時)
61613,61614:沒有和使用TLS的STOMP客戶端(僅當啟用了STOMP外掛時)
1883,8883 :( 如果啟用了MQTT外掛,則沒有和使用TLS的MQTT客戶端
15674:STOMP-over-WebSockets客戶端(僅當啟用了Web STOMP外掛時)
15675:MQTT-over-WebSockets客戶端(僅當啟用了Web MQTT外掛時)
2、常用命令
[[email protected] sbin]# ./rabbitmqctl
Usage:
rabbitmqctl [-n <node>] [-q] <command> [<command options>]
Options:
-n node
-q
Default node is "[email protected]", where server is the local host. On a host
named "server.example.com", the node name of the RabbitMQ Erlang node will
usually be [email protected] (unless RABBITMQ_NODENAME has been set to some
non-default value at broker startup time). The output of hostname -s is usually
the correct suffix to use after the "@" sign. See rabbitmq-server(1) for
details of configuring the RabbitMQ broker.
Quiet output mode is selected with the "-q" flag. Informational messages are
suppressed when quiet mode is in effect.
Commands:
stop [<pid_file>]
stop_app
start_app
wait <pid_file>
reset
force_reset
rotate_logs <suffix>
cluster <clusternode> ...
force_cluster <clusternode> ...
cluster_status
add_user <username> <password>
delete_user <username>
change_password <username> <newpassword>
clear_password <username>
set_user_tags <username> <tag> ...
list_users
add_vhost <vhostpath>
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 [-p <vhostpath>] <username>
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>]
status
environment
report
eval <expr>
close_connection <connectionpid> <explanation>
trace_on [-p <vhost>]
trace_off [-p <vhost>]
set_vm_memory_high_watermark <fraction>
3、rabbit角色說明
l none
不能訪問 management plugi
l management
使用者可以通過AMQP做的任何事外加:
列出自己可以通過AMQP登入的virtual hosts
檢視自己的virtual hosts中的queues, exchanges 和 bindings
檢視和關閉自己的channels 和 connections
檢視有關自己的virtual hosts的“全域性”的統計資訊,包含其他使用者在這些virtual hosts中的活動。
l policymaker
management可以做的任何事外加:
檢視、建立和刪除自己的virtual hosts所屬的policies和parameters
l monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他們不能登入的virtual hosts
檢視其他使用者的connections和channels
檢視節點級別的資料如clustering和memory使用情況
檢視真正的關於所有virtual hosts的全域性的統計資訊
l administrator
policymaker和monitoring可以做的任何事外加:
建立和刪除virtual hosts
檢視、建立和刪除users
檢視建立和刪除permissions
關閉其他使用者的connections
4、Exchange Type說明
l fanout轉發器,是幾種轉發器中轉發訊息最快的一種,其路由規則會將訊息轉發給與轉發器繫結的每一個佇列中,也就是輪循轉發相同訊息給佇列
l direct轉發器,會根據當前傳送和接受端協商的統一的routing key來完全匹配轉發訊息,也就是轉發器傳送標有routing key標誌的路由資訊,只有接收端的binding key與routing key與之相同,才會接收到資訊
l topic轉發器,相對於direct轉發器,topic可以轉發符合多個條件的訊息,也就是傳送端傳送訊息,而接受端可以靈活配置接收訊息的路由規則,例如:msg.#和msg.*,前者能夠接收msg.log.info和msg.log型別訊息,而後者則能接收到msg.*型別訊息,所以#號代表一個或多個單詞匹配,而*則代表一個單詞匹配了,實際上就是正常的規則過濾機制
l headers轉發器,也是用的比較少的轉發器,原因請檢視第一部分介紹。此種轉發器,忽略了路由routing key規則,使用了健-值對形式匹配規則,此種轉發器規定,在接受端必須使用x-match,它目前有兩種型別:all和any,前者代表所有的鍵-值都滿足後,才能收到資訊,而後者則滿足任意個就可以收到消,這個會在後續文章介紹,這裡只需瞭解即可
5、圖形化管理RabbitMQ
http://www.rabbitmq.com/management.html # 官網文件
開啟管理外掛
其他配置選項,根據配置檔案酌情修改如下:
登入
6、配置檔案中文說明
##相關文件指南:http://rabbitmq.com/configure.html。看到
## http://rabbitmq.com/documentation.html文件ToC。
## 網路設定
## ====================
##
##相關文件指南:http://rabbitmq.com/networking.html。
##
##預設情況下,RabbitMQ將使用偵聽所有介面
##標準(保留)AMQP 0-9-1和1.0埠。
##
#listeners.tcp.default = 5672
##要監聽特定的介面,請提供帶有埠的IP地址。
##例如,只在本地主機上偵聽IPv4和IPv6:
##
#IPv4
#listeners.tcp.local = 127.0.0.1:5672
#IPv6
#listeners.tcp.local_v6 = :: 1:5672
##您可以使用偵聽器名稱定義多個偵聽器
#listeners.tcp.other_port = 5673
#listeners.tcp.other_ip = 10.10.10.10:5672
## TLS監聽器的配置方式與TCP監聽器相同,
##包括控制介面選擇的選項。
##
#listeners.ssl.default = 5671
##將接受TCP連線的Erlang程序的數量
##和TLS監聽器。
##
#num_acceptors.tcp = 10
#num_acceptors.ssl = 1
## AMQP 0-8 / 0-9 / 0-9-1握手的最大時間(套接字連線後)
##和TLS握手),以毫秒為單位。
##
#handshake_timeout = 10000
##設定為'true'在接受a時執行反向DNS查詢
##連線。主機名將被顯示,而不是IP地址
在rabbitmqctl中的##和管理外掛。
##
#reverse_dns_lookups = true
##
##安全,訪問控制
## ==============
##
##相關文件指南:http://rabbitmq.com/access-control.html。
##預設的“訪客”使用者只能訪問伺服器
##通過一個回送介面(例如本地主機)。
## {loopback_users,[<<“guest”>>]},
##
#loopback_users.guest = true
##如果您想允許訪問,請取消註釋以下行
##來賓使用者從網路上的任何地方。
#loopback_users.guest = false
## TLS配置。
##
##相關文件指南: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
##選擇要使用的認證/授權後端。
##
##備用後端由外掛提供,例如rabbitmq-auth-backend-ldap。
##
##注意:這些設定需要啟用某些外掛。
##
##相關文件指南:
##
## * http://rabbitmq.com/plugins.html
## * http://rabbitmq.com/access-control.html
##
#auth_backends.1 = rabbit_auth_backend_internal
##使用單獨的後端進行身份驗證和授權,
## 見下文。
#auth_backends.1.authn = rabbit_auth_backend_ldap
#auth_backends.1.authz = rabbit_auth_backend_internal
## rabbitmq_auth_backend_ldap外掛允許經紀人
##通過推遲到一個執行認證和授權
##外部LDAP伺服器。
##
##相關文件指南:
##
## * http://rabbitmq.com/ldap.html
## * http://rabbitmq.com/access-control.html
##
##使用LDAP進行身份驗證和授權
#auth_backends.1 = rabbit_auth_backend_ldap
##使用HTTP服務進行身份驗證和
##授權
#auth_backends.1 = rabbit_auth_backend_http
##在鏈中使用兩個後端:首先是HTTP,然後是內部
#auth_backends.1 = rabbit_auth_backend_http
#auth_backends.2 = rabbit_auth_backend_internal
##認證
##內建的機制是“普通”,
##'AMQPLAIN'和'EXTERNAL'可以通過新增其他機制
##外掛。
##
##相關文件指南:http://rabbitmq.com/authentication.html。
##
#auth_mechanisms.1 = PLAIN
#auth_mechanisms.2 = AMQPLAIN
## rabbitmq-auth-mechanism-ssl外掛使得它成為可能
##根據客戶端的x509(TLS)證書對使用者進行身份驗證。
##相關文件指南:http://rabbitmq.com/authentication.html。
##
##要使用auth-mechanism-ssl,EXTERNAL機制應該
##被啟用:
##
#auth_mechanisms.1 = PLAIN
#auth_mechanisms.2 = AMQPLAIN
#auth_mechanisms.3 = EXTERNAL
##要強制所有客戶端上基於x509證書的身份驗證,
##排除所有其他機制(注意:這將禁用基於密碼的
##認證甚至管理使用者介面!):
##
#auth_mechanisms.1 = EXTERNAL
##這涉及rabbitmq-auth-mechanism-ssl外掛和
## STOMP ssl_cert_login配置。檢視RabbitMQ STOMP外掛
稍後在此檔案和README中的##配置部分
## https://github.com/rabbitmq/rabbitmq-auth-mechanism-ssl進一步
## 細節。
##
##使用TLS證書的CN而不是DN作為使用者名稱
##
#ssl_cert_login_from = common_name
## TLS握手超時,以毫秒為單位。
##
#ssl_handshake_timeout = 5000
##密碼雜湊實現。只會影響新的
##建立使用者。重新計算現有使用者的雜湊值
##有必要更新她的密碼。
##
##要使用SHA-512,請設定為rabbit_password_hashing_sha512。
##
#password_hashing_module = rabbit_password_hashing_sha256
##匯入從早期版本匯出的定義
##比3.6.0,有可能回到MD5(只做這個
##作為臨時措施!)通過將其設定為rabbit_password_hashing_md5。
##
#password_hashing_module = rabbit_password_hashing_md5
##
##預設使用者/ VHost
## ====================
##
##首先啟動RabbitMQ將建立一個虛擬主機和一個使用者。這些
## config items控制建立的內容。
##相關文件指南:http://rabbitmq.com/access-control.html
##
#default_vhost = /
#default_user = guest
#default_pass = guest
#default_permissions.configure =.*
#default_permissions.read =.*
#default_permissions.write =.*
##預設使用者的標籤
##
##有關標籤的更多詳細資訊,請參閱文件
##管理外掛在http://rabbitmq.com/management.html。
##
#default_user_tags.administrator = true
##定義這樣的其他標籤:
#default_user_tags.management = true
#default_user_tags.custom_tag = true
##
##其他網路和協議相關的配置
## ================================================ =====
##
##設定預設的AMQP 0-9-1心跳間隔(以秒為單位)。
##相關文件指南:
##
## * http://rabbitmq.com/heartbeats.html
## * http://rabbitmq.com/networking.html
##
#心跳= 600
##設定AMQP幀的最大允許大小(以位元組為單位)。
##
#frame_max = 131072
##設定連線前伺服器將接受的最大幀大小
##調整發生
##
#initial_frame_max = 4096
##設定每個連線的最大允許通道數量。
## 0的意思是“沒有限制”。
##
#channel_max = 128
##自定義TCP監聽器(套接字)配置。
##
##相關文件指南:
##
## * 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
##
##資源限制和流量控制
## ==============================
##
##相關文件指南:http://rabbitmq.com/memory.html。
##基於記憶體的流量控制閾值。
##
#vm_memory_high_watermark.relative = 0.4
##或者,我們可以設定節點使用的RAM的限制(以位元組為單位)。
##
#vm_memory_high_watermark.absolute = 1073741824
##或者您可以使用記憶體單位設定絕對值(使用RabbitMQ 3.6.0+)。
如果相對定義,絕對水印將被忽略!
##
#vm_memory_high_watermark.absolute = 2GB
##
##支援的單位字尾:
##
## kb,KB:kibibytes(2 ^ 10個位元組)
## mb,MB:mebibytes(2 ^ 20)
GB gb,GB:gibibytes(2 ^ 30)
##佇列開始的高水印限制的分數
##尋呼訊息到光碟為了釋放記憶體。
##例如,當vm_memory_high_watermark被設定為0.4並且該值被設定為0.5時,
##分頁可以在節點使用總可用RAM的20%時開始。
##
##大於1.0的值可能是危險的,應謹慎使用。
##
##一個替代方案是使用持久佇列和釋出訊息
##作為永久(交付模式= 2)。有了這個組合佇列將
##將訊息更快地移動到磁碟。
##
##另一種選擇是配置佇列來尋呼所有訊息(都是
##永續性和瞬態)到磁碟
##儘可能參見http://rabbitmq.com/lazy-queues.html。
##
#vm_memory_high_watermark_paging_ratio = 0.5
##選擇Erlang VM記憶體消耗計算策略。可以是“分配”,“rss”或“legacy”(別名為“erlang”),
##在3.6.11中介紹。“rss”是3.6.12的預設值。
##檢視https://github.com/rabbitmq/rabbitmq-server/issues/1223和rabbitmq / rabbitmq-common#224獲取背景資訊。
#vm_memory_calculation_strategy = rss
##我們執行記憶體檢查的間隔(以毫秒為單位)
##水平對水印。
##
#memory_monitor_interval = 2500
##可用的總記憶體可以從OS資源中計算出來
## - 預設選項 - 或作為配置引數提供。
#total_memory_available_override_value = 2GB
##設定磁碟空閒限制(以位元組為單位)。一旦可用磁碟空間達到此目的
##下限,磁碟報警將被設定 - 請參閱文件
##上面列出了更多的細節。
##
如果相對定義,絕對水印將被忽略!
#disk_free_limit.absolute = 50000
##或者你可以使用記憶體單元(與vm_memory_high_watermark相同)
##與RabbitMQ 3.6.0+。
#disk_free_limit.absolute = 500KB
#disk_free_limit.absolute = 50mb
#disk_free_limit.absolute = 5GB
##或者,我們可以設定一個相對於可用RAM總量的限制。
##
##低於1.0的值可能是危險的,應謹慎使用。
#disk_free_limit.relative = 2.0
##
##聚類
## =====================
##
#cluster_partition_handling =忽略
## pause_if_all_down策略需要額外的配置
#cluster_partition_handling = pause_if_all_down
##恢復策略。可以是“autoheal”或“忽略”
#cluster_partition_handling.pause_if_all_down.recover =忽略
##節點名稱檢查
#cluster_partition_handling.pause_if_all_down.nodes.1 = rabbit @ localhost
#cluster_partition_handling.pause_if_all_down.nodes.2 = hare @ localhost
##在訊息中映象同步批量大小。增加這將加快速度
##同步,但批量總大小(以位元組為單位)不得超過2 GiB。
##在RabbitMQ 3.6.0或更高版本中可用。
##
#mirroring_sync_batch_size = 4096
##在啟動時自動進行聚類。僅適用
##到第一次剛復位或啟動的節點。
##
##相關文件指南: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的對等發現。這後端將列出A記錄
配置的主機名##並執行反向查詢
##返回的地址。
#autocluster.peer_discovery_backend = rabbit_peer_discovery_dns
#autocluster.dns.hostname = rabbitmq.discovery.mycompany.local
##此節點的型別可以配置。如果你不確定
##使用什麼節點型別,總是使用“光碟”。
#autocluster.node_type =光碟
##傳送Keepalive訊息的間隔(以毫秒為單位)
##給其他叢集成員。請注意,這不是一回事
## as net_ticktime; 遺漏的keepalive訊息不會導致節點
##被認為是失望的。
##
#cluster_keepalive_interval = 10000
##
##統計收集
## =====================
##
##設定(內部)統計資訊收集粒度。
##
##可以不是,粗或細
#collect_statistics =無
#collect_statistics =粗略
##統計資訊收集間隔(以毫秒為單位)。增加
##這將減少管理資料庫的負載。
##
#collect_statistics_interval = 5000
##
##其他/高階選項
## =====================
##
##注意:只有在你明白自己在做什麼的情況下才能改變這些!
##
##顯式啟用/禁用hipe編譯。
##
#hipe_compile = false
##在等待群集中的Mnesia表時使用的超時
##變得可用。
##
#mnesia_table_loading_retry_timeout = 30000
##在群集啟動中等待Mnesia表時重試。注意
##此設定不適用於Mnesia升級或節點刪除。
##
#mnesia_table_loading_retry_limit = 10
##以位元組為單位的大小,低於該大小將訊息嵌入到佇列索引中。
##相關文件指南:http://rabbitmq.com/persistence-conf.html
##
#queue_index_embed_msgs_below = 4096
##你也可以用記憶體單位來設定這個大小
##
#queue_index_embed_msgs_below = 4kb
##是否啟用所有的後臺定期GC
## Erlang處於“等待”狀態。
##
##禁用後臺GC可以減少客戶端操作的延遲,
##保持啟用可能會減少RAM的使用量。
##
#background_gc_enabled = false
##執行背景GC的目標(期望)間隔(以毫秒為單位)。
##實際時間間隔取決於執行時間的長短
##操作(可高於此間隔)。值小於
##不建議使用30000毫秒。
##
#background_gc_target_interval = 60000
##是否啟用代理協議支援。
##一旦啟用,客戶端不能直接連線到代理
##了。他們必須通過一個負載均衡器連線傳送
##代理協議頭在連線時間給代理。
##此設定僅適用於AMQP客戶端,其他協議
像MQTT或STOMP這樣的##有自己的設定來啟用代理協議。
##請參閱外掛文件以獲取更多資訊。
##
#proxy_protocol = false
## ------------------------------------------------ ----------------------------
##高階的Erlang網路/叢集選項。
##
##相關文件指南:http://rabbitmq.com/clustering.html
## ------------------------------------------------ ----------------------------
#======================================
#核心部分
#======================================
#kernel.net_ticktime = 60
## ------------------------------------------------ ----------------------------
## RabbitMQ管理外掛
##
##相關文件指南:http://rabbitmq.com/management.html。
## ------------------------------------------------ ----------------------------
#=======================================
#管理部分
#=======================================
##從以下JSON檔案中預載模式定義。
##相關文件指南:http://rabbitmq.com/management.html#load-definitions。
##
#management.load_definitions = /path/to/exported/definitions.json
##將所有對管理HTTP API的請求記錄到一個檔案中。
##
#management.http_log_dir = /path/to/access.log
##更改HTTP偵聽器偵聽的埠,
##指定Web伺服器繫結的介面。
##還要將偵聽器設定為使用TLS並提供TLS選項。
##
#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
##“基本”,“詳細”或“無”之一。看到
## http://rabbitmq.com/management.html#fine-stats瞭解更多詳情。
#management.rates_mode =基本
##配置聚合資料的長度(如訊息速率和佇列
##長度)被保留。請閱讀外掛的文件
## http://rabbitmq.com/management.html#configuration更多
## 細節。
##您可以使用“分鐘”,“小時”和“日”鍵或整數鍵(以秒為單位)
#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鏟子外掛
##
##相關文件指南:http://rabbitmq.com/shovel.html
## ------------------------------------------------ ----------------------------
## Shovel外掛配置示例在additional.config檔案中定義
## ------------------------------------------------ ----------------------------
## RabbitMQ STOMP外掛
##
##相關文件指南:http://rabbitmq.com/stomp.html
## ------------------------------------------------ ----------------------------
#=======================================
#STOMP部分
#=======================================
##網路配置。格式通常與核心代理相同。
##
#stomp.listeners.tcp.default = 61613
##與ssl監聽器相同
##
#stomp.listeners.ssl.default = 61614
##將接受TCP連線的Erlang程序的數量
##和TLS監聽器。
##
#stomp.num_acceptors.tcp = 10
#stomp.num_acceptors.ssl = 1
##其他TLS選項
##使用TLS時,從客戶端證書中提取名稱。
##
#stomp.ssl_cert_login = true
##設定預設的使用者名稱和密碼。這被用作預設登入
##每當CONNECT框架省略登入名和密碼頭。
##
##請注意,設定這將允許客戶端連線沒有
##驗證!
##
#stomp.default_user = guest
#stomp.default_pass = guest
##如果配置了預設使用者,或者您已配置使用TLS客戶端
##證書為基礎的身份驗證,您可以選擇允許客戶端
##完全忽略CONNECT幀。如果設定為true,則客戶端是
##自動連線為預設使用者或使用者提供的
每當在一個會話上傳送的第一幀不是一個## TLS證書
##連線框架。
##
#stomp.implicit_connect = true
##是否啟用代理協議支援。
##一旦啟用,客戶端不能直接連線到代理
##了。他們必須通過一個負載均衡器連線傳送
##代理協議頭在連線時間給代理。
##此設定僅適用於STOMP客戶端,其他協議
像MQTT或AMQP這樣的##有自己的設定來啟用代理協議。
##請參閱外掛或代理文件以獲取更多資訊。
##
#stomp.proxy_protocol = false
## ------------------------------------------------ ----------------------------
## RabbitMQ MQTT介面卡
##
##見https://github.com/rabbitmq/rabbitmq-mqtt/blob/stable/README.md
##的細節
## ------------------------------------------------ ----------------------------
#=======================================
#MQTT部分
#=======================================
##設定預設的使用者名稱和密碼。將被用作預設登入
##如果連線客戶端沒有提供其他登入資訊。
##
##請注意,設定這將允許客戶端連線沒有
##驗證!
##
#mqtt.default_user = guest
#mqtt.default_pass = guest
##啟用匿名訪問。如果這被設定為false,客戶端必須提供
##登入資訊才能連線。請參閱default_user / default_pass
##配置元素管理登入沒有身份驗證。
##
#mqtt.allow_anonymous = true
##如果你有多個chosts,指定哪個
##介面卡連線。
##
#mqtt.vhost = /
##指定釋出來自MQTT客戶端的訊息的交換。
##
#mqtt.exchange = amq.topic
##指定TTL(生存時間)來控制非乾淨會話的生命週期。
##
#mqtt.subscription_ttl = 1800000
##設定預取計數(控制未確認的最大數量
##訊息將被交付)。
##
#mqtt.prefetch = 10
## TCP / SSL配置(按照代理配置)。
##
#mqtt.listeners.tcp.default = 1883
##與ssl監聽器相同
##
#mqtt.listeners.ssl.default = 1884
##將接受TCP連線的Erlang程序的數量
##和TLS監聽器。
##
#mqtt.num_acceptors.tcp = 10
#mqtt.num_acceptors.ssl = 1
## TCP偵聽器選項(按照代理配置)。
##
#mqtt.tcp_listen_options.backlog = 128
#mqtt.tcp_listen_options.nodelay = true
##是否啟用代理協議支援。
##一旦啟用,客戶端不能直接連線到代理
##了。他們必須通過一個負載均衡器連線傳送
##代理協議頭在連線時間給代理。
##此設定僅適用於STOMP客戶端,其他協議
##像STOMP或AMQP有自己的設定來啟用代理協議。
##請參閱外掛或代理文件以獲取更多資訊。
##
#mqtt.proxy_protocol = false
## ------------------------------------------------ ----------------------------
## RabbitMQ AMQP 1.0支援
##
##見https://github.com/rabbitmq/rabbitmq-amqp1.0/blob/stable/README.md。
## ------------------------------------------------ ----------------------------
#=======================================
#AMQP 1.0部分
#=======================================
##未通過SASL認證的連線將以此連線
##帳戶。請參閱自述檔案以獲取更多資訊。
##
##請注意,設定這將允許客戶端連線沒有
##驗證!
##
#amqp1_0.default_user = guest
##啟用協議嚴格模式。請參閱自述檔案以獲取更多資訊。
##
#amqp1_0.protocol_strict_mode = false
## Lager控制記錄。
##請參閱https://github.com/basho/lager獲取更多文件
##
## Log direcrory,預設情況下取自RABBITMQ_LOG_BASE env變數。
##
#log.dir = / var / log / rabbitmq
##記錄到控制檯(可以為true或false)
##
#log.console = false
## Loglevel登入到控制檯
##
#log.console.level = info
##記錄到檔案。可以是假的或檔名。
##預設:
#log.file = rabbit.log
## 把關掉:
#log.file = false
## Loglevel記錄到檔案
##
#log.file.level = info
##檔案旋轉配置。沒有旋轉的defualt。
##不要將旋轉日期設定為“”。如果需要“”值,請保