目錄html
RabbitMQ 經常使用的三種自定義服務器的通用方法:node
rabbitmq.conf和rabbitmq-env.conf的位置linux
若是rabbitmq.conf和rabbitmq-env.conf 的兩個文件不存在,那麼咱們能夠建立該文件,而後咱們能夠經過環境變量
指定該文件的位置。git
補充 :github
在rabbitmq 3.7.0 以前,rabbitmq.conf 使用了Erlang語法配置格式,新的版本使用了sysctl 格式.web
sysctl 語法:windows
配置示例文件:rabbitmq.conf.example緩存
配置屬性和描述(官網連接)安全
屬性 | 描述 | 默認值 |
---|---|---|
listeners | 要監聽 AMQP 0-9-1 and AMQP 1.0 的端口 | listeners.tcp.default = 5672 |
num_acceptors.tcp | 接受tcp鏈接的erlang 進程數 | num_acceptors.tcp = 10 |
handshake_timeout | AMQP 0-9-1 超時時間,也就是最大的鏈接時間,單位毫秒 | handshake_timeout = 10000 |
listeners.ssl | 啓用TLS的協議 | 默認值爲none |
num_acceptors.ssl | 接受基於TLS協議的鏈接的erlang 進程數 | num_acceptors.ssl = 10 |
ssl_options | TLS 配置 | ssl_options =none |
ssl_handshake_timeout | TLS 鏈接超時時間 單位爲毫秒 | ssl_handshake_timeout = 5000 |
vm_memory_high_watermark | 觸發流量控制的內存閾值,能夠爲相對值(0.5),或者絕對值 vm_memory_high_watermark.relative = 0.6 ,vm_memory_high_watermark.absolute = 2GB | 默認vm_memory_high_watermark.relative = 0.4 |
vm_memory_calculation_strategy | 內存使用報告策略,assigned:使用Erlang內存分配器統計信息 rss:使用操做系統RSS內存報告。這使用特定於操做系統的方法,並可能啓動短時間子進程。legacy:使用遺留內存報告(運行時認爲將使用多少內存)。這種策略至關不許確。erlang 與legacy同樣 是爲了向後兼容 | vm_memory_calculation_strategy = allocated |
vm_memory_high_watermark_paging_ratio | 當內存的使用達到了50%後,隊列開始將消息分頁到磁盤 | vm_memory_high_watermark_paging_ratio = 0.5 |
total_memory_available_override_value | 該參數用於指定系統的可用內存總量,通常不使用,適用於在容器等一些獲取內存實際值不精確的環境 | 默認未設置 |
disk_free_limit | Rabbitmq存儲數據的可用空間限制,當低於該值的時候,將觸發流量限制,設置可參考vm_memory_high_watermark參數 | disk_free_limit.absolute = 50MB |
log.file.level | 控制記錄日誌的等級,有info,error,warning,debug | log.file.level = info |
channel_max | 最大通道數,但不包含協議中使用的特殊通道號0,設置爲0表示無限制,不建議使用該值,容易出現channel泄漏 | channel_max = 2047 |
channel_operation_timeout | 通道操做超時,單位爲毫秒 | channel_operation_timeout = 15000 |
heartbeat | 表示鏈接參數協商期間服務器建議的心跳超時的值。若是兩端都設置爲0,則禁用心跳,不建議禁用 | heartbeat = 60 |
default_vhost | rabbitmq安裝後啓動建立的虛擬主機 | default_vhost = / |
default_user | 默認建立的用戶名 | default_user = guest |
default_pass | 默認用戶的密碼 | default_pass = guest |
default_user_tags | 默認用戶的標籤 | default_user_tags.administrator = true |
default_permissions | 在建立默認用戶是分配給默認用戶的權限 | default_permissions.configure = .* default_permissions.read = .* default_permissions.write = .* |
loopback_users | 容許經過迴環地址鏈接到rabbitmq的用戶列表,若是要容許guest用戶遠程鏈接(不安全)請將該值設置爲none,若是要將一個用戶設置爲僅localhost鏈接的話,配置loopback_users.username =true(username要替換成用戶名) | loopback_users.guest = true(默認爲只能本地鏈接) |
cluster_formation.classic_config.nodes | 設置集羣節點cluster_formation.classic_config.nodes.1 = rabbit@hostname1 | |
cluster_formation.classic_config.nodes.2 = rabbit@hostname2 | 默認爲空,未設置 | |
collect_statistics | 統計收集模式,none 不發出統計信息事件,coarse每一個隊列鏈接都發送統計一次,fine每發一條消息的統計數據 | collect_statistics = none |
collect_statistics_interval | 統計信息收集間隔,以毫秒爲單位 | collect_statistics_interval = 5000 |
delegate_count | 用於集羣內通訊的委託進程數。在多核的服務器上咱們能夠增長此值 | delegate_count = 16 |
tcp_listen_options | 默認的套接字選項 | tcp_listen_options.backlog = 128 ..... |
hipe_compile | 設置爲true以使用HiPE預編譯RabbitMQ的部分,HiPE是Erlang的即時編譯器,啓用HiPE能夠提升吞吐量兩位數,但啓動時會延遲幾分鐘。Erlang運行時必須包含HiPE支持。若是不是,啓用此選項將不起做用。HiPE在某些平臺上根本不可用,尤爲是Windows。 | hipe_compile = false |
cluster_keepalive_interval | 節點應該多長時間向其餘節點發送keepalive消息(以毫秒爲單位),keepalive的消息丟失不會被視爲關閉 | cluster_keepalive_interval = 10000 |
queue_index_embed_msgs_below | 消息的字節大小,低於該大小,消息將直接嵌入隊列索引中 bytes | queue_index_embed_msgs_below = 4096 |
mnesia_table_loading_retry_timeout | 等待集羣中Mnesia表可用的超時時間,單位毫秒 | mnesia_table_loading_retry_timeout = 30000 |
mnesia_table_loading_retry_limit | 集羣啓動時等待Mnesia表的重試次數,不適用於Mnesia升級或節點刪除。 | mnesia_table_loading_retry_limit = 10 |
mirroring_sync_batch_size | 要在隊列鏡像之間同步的消息的批處理大小 | mirroring_sync_batch_size = 4096 |
queue_master_locator | 隊列主節點的策略,有三大策略 min-masters,client-local,random | queue_master_locator = client-local |
proxy_protocol | 若是設置爲true ,則鏈接須要經過反向代理鏈接,不能直鏈接 | proxy_protocol = false |
management.listener.port | rabbitmq web管理界面使用的端口 | management.listener.port = 15672 |
查看rabbitmq的有效配置bash
rabbitmqctl environment
示例文件
某些配置設置不可用或難以使用sysctl格式進行配置。所以,可使用Erlang術語格式的其餘配置文件advanced.config
它將與rabbitmq.conf 文件中提供的配置合併。
配置屬性和描述(官網連接)
屬性 | 描述 | 默認值 |
---|---|---|
msg_store_index_module | 設置隊列索引使用的模塊 | {rabbit,[ {msg_store_index_module,rabbit_msg_store_ets_index} ]} |
backing_queue_module | 隊列內容的實現模塊。 | {rabbit,[ {backing_queue_module,rabbit_variable_queue} ]} |
msg_store_file_size_limit | 消息儲存的文件大小,現有的節點更改是危險的,可能致使數據丟失 | 默認值16777216 |
trace_vhosts | 內部的tracer使用,不建議更改 | {rabbit,[ {trace_vhosts,[]} ]} |
msg_store_credit_disc_bound | 設置消息儲存庫給隊列進程的積分,默認一個隊列進程被賦予4000個消息積分 | {rabbit, [{msg_store_credit_disc_bound, {4000, 800}}]} |
queue_index_max_journal_entries | 隊列的索引日誌超過該閾值將刷新到磁盤 | {rabbit, [{queue_index_max_journal_entries, 32768}]} |
lazy_queue_explicit_gc_run_operation_threshold | 在內存壓力下爲延遲隊列設置的值,該值能夠觸發垃圾回收和減小內存使用,下降該值,會下降性能,提升該值,會致使更高的內存消耗 | {rabbit,[{lazy_queue_explicit_gc_run_operation_threshold, 1000}]} |
queue_explicit_gc_run_operation_threshold | 在內存壓力下,正常隊列設置的值,該值能夠觸發垃圾回收和減小內存使用,下降該值,會下降性能,提升該值,會致使更高的內存消耗 | {rabbit, [{queue_explicit_gc_run_operation_threshold, 1000}]} |
官網連接
經過rabbitmq-env.conf 來定義環境變量
RABBITMQ_NODENAME 指定節點名稱
屬性 | 描述 | 默認值 |
---|---|---|
RABBITMQ_NODE_IP_ADDRESS | 綁定的網絡接口 | 默認爲空字符串表示綁定本機全部的網絡接口 |
RABBITMQ_NODE_PORT | 端口 | 默認爲5672 |
RABBITMQ_DISTRIBUTION_BUFFER_SIZE | 節點之間通訊鏈接的數據緩衝區大小 | 默認爲128000,該值建議不要使用低於64MB |
RABBITMQ_IO_THREAD_POOL_SIZE | 運行時用於io的線程數 | 建議不要低於32,linux默認爲128 ,windows默認爲64 |
RABBITMQ_NODENAME | rabbitmq節點名稱,集羣中要注意節點名稱惟一 | linux 默認節點名爲 rabbit@$hostname |
RABBITMQ_CONFIG_FILE | rabbitmq 的配置文件路徑,注意不要加文件的後綴(.conf) | 默認 $RABBITMQ_HOME/etc/rabbitmq/rabbitmq(二進制安裝) /etc/rabbitmq/rabbitmq(rpm 安裝) |
RABBITMQ_ADVANCED_CONFIG_FILE | advanced.config文件路徑 | 默認 $RABBITMQ_HOME/etc/rabbitmq/advanced(二進制安裝) /etc/rabbitmq/advanced(rpm 安裝) |
RABBITMQ_CONF_ENV_FILE | 環境變量配置文件路徑 | 默認 $RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf(二進制安裝) /etc/rabbitmq/rabbitmq-env.conf(rpm 安裝) |
RABBITMQ_SERVER_CODE_PATH | 在使用HiPE 模塊時須要使用 | 默認爲空 |
RABBITMQ_LOGS | 指定日誌文件位置 | 默認爲 $RABBITMQ_HOME/etc/var/log/rabbitmq/ |
網絡設置 http://www.rabbitmq.com/networking.html
RABBITMQ_DISTRIBUTION_BUFFER_SIZE 節點間通訊緩衝區大小,默認值 128Mb,節點流量比較多的集羣中,能夠提高該值,建議該值不要低於64MB。
tcp 緩存區大小
下示例將AMQP 0-9-1鏈接的TCP緩衝區設置爲192 KiB:
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
在生產中,若是rabbitmq只爲單個系統提供服務的時候,咱們使用默認的(/)是能夠的。在爲多個系統提供的服務時,咱們建議使用單獨的vhost.
對於生產環境,請刪除默認用戶(guest),默認用戶只能從localhost 鏈接。
咱們能夠建立指定權限的單獨用戶爲每一個應用提供服務。對於開啓權限用戶來講,咱們可使用證書,和源ip地址過濾,和身份驗證。來增強安全性。
在生產環境咱們可能須要調整一些系統的默認限制,以便處理大量的併發鏈接和隊列。
須要調整的值有打開的最大文件數。在生產環境爲rabbitmq 運行的用戶設定爲65536,可是對於大多數開發環境來講,4096就已經足夠了。
查看默認的打開文件的最大數量。
ulimit -n
更改方式:
ulimit -n 65536
[service] LimitNOFILE=300000
2.2 若是不是systemed 來進行管理的話,咱們能夠更改rabbitmq的啓動加載的環境配置文件 rabbitmq-env.conf。在裏面開頭添加ulimit -S -n 4096,但該值不能超過系統的默認值的最大值。
ulimit -S -n 4096
2.3 系統級別更改
更改配置文件:/etc/security/limits.conf
在文件末尾前面加入
rabbitmq(啓動的用戶名) - nofile 65536
若是更改前用戶已經登陸的話,須要從新登陸下才能生效。
1.4.4 內存
當rabbitmq 檢測到它使用的內存超過系統的40%,它將不會接受任何新的消息,這個值是由參數 vm_memory_high_watermark來控制的,默認值是一個安全的值,修改該值須要注意。 rabbitmq 的至少須要128MB,建議vm_memory_high_watermark 值爲 0.4~0..66 ,不要使用大於0.7的值。
1.4.5 磁盤
磁盤默認的儲存數據閾值是50MB,當低於該值的時候,將觸發流量限制。50MB 只適用於開發環境,生產環境須要調高該值,否則容易由磁盤空間不足致使節點故障,也可能致使數據丟失。
在生產環境中咱們設置的值
1.4.6 鏈接
少使用短鏈接,使用鏈接池或者長鏈接。
-1.4.8 更改默認端口 咱們經常使用的web界面的端口 15672 和AMQP 0-9-1 協議端口 5672 ,建議更改,web界面更改,配置參數 management.listener.port ,AMQP 0-9-1 協議端口配置參數 listeners.tcp.default。