在 nix 系統上配置 RabbitMQ

配置你的環境

RabbitMQ 在/etc/rabbitmq/rabbitmq-env.conf 中查詢一組環境變數。如果它不存在,則它採用預設值。rabbitmq-env.conf 中的所有值都被匯出到 RabbitMQ 伺服器執行的環境中,並帶有 RABBITMQ_ 字首; 此字首不包含在配置檔案中。可以設定以下變數(使用 key=value 語法):

NODENAME:設定 RabbitMQ 節點的名稱。

CONFIG_FILE:設定 RabbitMQ 配置檔案的位置(不是這個環境檔案)

NODE_IP_ADDRESS:設定要監聽的特定 IP 地址。

NODE_PORT:設定要偵聽的埠

DIST_PORT:設定偵聽群集的埠

USE_LONGNAME:布林值,指示是否使用完全限定名稱來標識節點。在具有相同短名稱的環境中很有用。

CTL_ERL_ARGS:設定執行 rabbitmqctl 時呼叫的 erl 命令的引數。用於除錯。

SERVER_ERL_ARGS:設定啟動 RabbitMQ 時呼叫的 erl 命令的引數。設定此值將覆蓋預設值(請參閱下面的示例配置)。

SERVER_ADDITIONAL_ERL_ARGS:為啟動 RabbitMQ 時呼叫的 erl 命令設定其他引數。設定此值會附加到 SERVER_ERL_ARGS 變數,預設情況下為空。

SERVER_START_ARGS:也為啟動 RabbitMQ 時呼叫的 erl 命令設定。

示例配置檔案(所有值實際上都是預設值):

NODENAME=rabbit@localhost    
CONFIG_FILE=/etc/rabbitmq/rabbitmq.config
NODE_IP_ADDRESS=""
NODE_PORT=5672
DIST_PORT=25672
USE_LONGNAME=false
CTL_ERL_ARGS=""
SERVER_ERL_ARGS="+K true +A30 +P 1048576 -kernel inet_default_connect_options [{nodelay,true}]"
SERVER_ADDITIONAL_ERL_ARGS=""
SERVER_START_ARGS=""

配置 RabbitMQ

注意:RabbitMQ 的配置檔案採用標準的 Erlang 配置語法。如果你不熟悉 Erlang,一開始可能會讓人感到困惑。它遵循以下格式:

[
    {rabbit,
        [
            {config_value_1, []},
            {config_value_2, []}
        ]
    },
    {additional_rabbitmq_plugins,
        [...]
    }
]

RabbitMQ 的配置部分有以下金鑰(來自 https://www.rabbitmq.com/configure.html ):

  • tcp_listeners:偵聽 AMQP 連線的埠列表(不含 SSL)。可以包含整數(意思是在所有介面上監聽)或者諸如 {"127.0.0.1", 5672} 之類的元組來監聽一個或多個介面。

    預設值:[5672]

  • num_tcp_acceptors:將接受 TCP 偵聽器連線的 Erlang 程序數。

    預設值:10

  • handshake_timeout:AMQP 0-8 / 0-9 / 0-9-1 握手的最大時間(套接字連線和 SSL 握手後),以毫秒為單位。

    預設值:10000

  • ssl_listeners:如上所述,用於 SSL 連線。

    預設值:[]

  • num_ssl_acceptors:將接受 SSL 偵聽器連線的 Erlang 程序數。

    預設值:1

  • ssl_options:SSL 配置。

    預設值:[]

  • ssl_handshake_timeout:SSL 握手超時,以毫秒為單位。

    預設值:5000

  • vm_memory_high_watermark:觸發流量控制的記憶體閾值。請參閱基於記憶體的流量控制文件。

    預設值:0.4

  • vm_memory_high_watermark_paging_ratio:佇列開始將訊息分頁到磁碟以釋放記憶體的高水位限制的分數。請參閱基於記憶體的流量控制文件。

    預設值:0.5

  • disk_free_limit:RabbitMQ 儲存資料的分割槽的磁碟可用空間限制。當可用磁碟空間低於此限制時,將觸發流量控制。可以相對於 RAM 的總量設定該值(例如,{mem_relative, 1.0})。該值也可以設定為整數個位元組。或者,或者,在資訊單元中(例如 50MB)。預設情況下,可用磁碟空間必須超過 50MB。請參閱磁碟警報文件。

    預設值:50000000

  • log_levels:控制日誌記錄的粒度。該值是日誌事件類別和日誌級別對的列表。

    級別可以是 none(未記錄任何事件),error(僅記錄錯誤),warning(僅記錄錯誤和警告),info(記錄錯誤,警告和資訊性訊息)或 debug(錯誤,警告) ,記錄資訊性訊息和除錯訊息)。

    目前定義了四個類別。其他當前未分類的事件始終記錄在案。

    類別是:

    • channel - 適用於與 AMQP 頻道相關的所有活動

    • connection - 用於與網路連線相關的所有事件

    • federation - 適用於與聯邦有關的所有活動

    • mirroring - 用於與映象佇列相關的所有事件

    預設值:[{connection, info}]

  • frame_max:與客戶端協商的幀的最大允許大小(以位元組為單位)。設定為 0 表示無限制,但會在某些 QPid 客戶端中觸發錯誤。設定較大的值可以提高吞吐量; 設定較小的值可以改善延遲。

    預設值:131072

  • channel_max:與客戶協商的最大允許通道數。設定為 0 表示無限制。使用更多通道會增加代理的記憶體佔用量。

    預設值:0

  • channel_operation_timeout:通道操作超時(以毫秒為單位)(內部使用,由於訊息傳遞協議的差異和限制而未直接暴露給客戶端)。

    預設值:15000

  • heartbeat:表示伺服器在 connection.tune 幀中傳送的心跳延遲(以秒為單位)的值。如果設定為 0,則禁用心跳。客戶端可能不遵循伺服器建議,請參閱 AMQP 參考以獲取更多詳細資訊。禁用心跳可能會在具有大量連線的情況下提高效能,但可能會導致在存在關閉非活動連線的網路裝置時連線中斷。

    預設值:60(版本 3.5.5 之前的 580

  • default_vhost:RabbitMQ 從頭開始建立新資料庫時建立的虛擬主機。交換 amq.rabbitmq.log 將存在於此虛擬主機中。

    預設值:<<"/">>

  • default_user:RabbitMQ 從頭開始建立新資料庫時要建立的使用者名稱。

    預設值:<<"guest">>

  • default_pass:預設使用者的密碼。

    預設值:<<"guest">>

  • default_user_tags:預設使用者的標籤。

    預設值:[administrator]

  • default_permissions:建立預設使用者時分配的許可權。

    預設值:[<<".*">>, <<".*">>, <<".*">>]

  • loopback_users:僅允許通過環回介面(即 localhost)連線到代理的使用者列表。

    如果你希望允許預設來賓使用者遠端連線,你需要將其更改為 []

    預設值:[<<"guest">>]

  • cluster_nodes:設定此項以使節點在第一次啟動時自動發生。元組的第一個元素是節點將嘗試聚類到的節點。第二個元素是 disc 或 ram,並確定節點型別。

    預設值:{[], disc}

  • server_properties:在連線時向客戶通告的鍵值對列表。

    預設值:[]

  • collect_statistics:統計收集模式。主要與管理外掛相關。選項包括:

    • none(不釋出統計事件)

    • coarse(按佇列/每個通道/每個連線發出的統計資訊)

    • fine(也發出每條訊息統計資訊)

    你可能不想自己改變它。

    預設值:none

  • collect_statistics_interval:統計資訊收集間隔,以毫秒為單位。主要與管理外掛相關。

    預設值:5000

  • auth_mechanisms:為客戶提供的 SASL 身份驗證機制。

    預設值:['PLAIN', 'AMQPLAIN']

  • auth_backends:要使用的身份驗證/授權後端列表。此列表可以包含模組的名稱(在這種情況下,同一模組用於身份驗證和授權),或者像 {ModN, ModZ} 這樣的 2 元組,在這種情況下,ModN 用於身份驗證,ModZ 用於授權。

    在 2 元組的情況下,ModZ 可以被列表替換,其中所有元素必須確認每個授權查詢,例如 {ModN, [ModZ1, ModZ2]}。這允許授權外掛混入並提供額外的安全約束。

    除了 rabbit_auth_backend_internal 之外的其他資料庫可以通過外掛獲得。

    預設值:[rabbit_auth_backend_internal]

  • reverse_dns_lookups:設定為 true 以讓 RabbitMQ 在客戶端連線上執行反向 DNS 查詢,並通過 rabbitmqctl 和管理外掛顯示該資訊。

    預設值:false

  • delegate_count:用於群集內通訊的委託程序數。在具有大量核心且也是群集的一部分的計算機上,你可能希望增加此值。

    預設值:16

  • trace_vhosts:由跟蹤器內部使用。你不應該改變這個。

    預設值:[]

  • tcp_listen_options:預設套接字選項。你可能不想改變它。

    預設:

    [{backlog,       128},
     {nodelay,       true},
     {exit_on_close, false}]
    
  • hipe_compile:設定為 true 以使用 HiPE 預編譯 RabbitMQ 的部分,HiPE 是 Erlang 的即時編譯器。這將以增加啟動時間為代價來增加伺服器吞吐量。

    你可能會在啟動時延遲幾分鐘後看到 20-50%的效能提升。這些數字與工作負載和硬體有很大關係。

    HiPE 支援可能無法編譯到你的 Erlang 安裝中。如果不是,啟用此選項只會顯示警告訊息,啟動將正常進行。例如,Debian / Ubuntu 使用者需要安裝 erlang-base-hipe 軟體包。

    HiPE 在某些平臺上根本不可用,特別是包括 Windows。

    HiPE 在 17.5 之前的 Erlang / OTP 版本中已知問題。對於 HiPE,強烈建議使用最新的 Erlang / OTP 版本。

    預設值:false

  • cluster_partition_handling:如何處理網路分割槽。可用的模式是:

    • ignore
    • pause_minority
    • {pause_if_all_down, [nodes], ignore | autoheal} 其中 [nodes] 是節點名稱列表(例如:['rabbit@node1', 'rabbit@node2']
    • autoheal

    有關更多資訊,請參閱有關分割槽的文件。

    預設值:ignore

  • cluster_keepalive_interval:節點應該多長時間向其他節點傳送 keepalive 訊息(以毫秒為單位)。請注意,這與 net_ticktime 不同; 錯過的 keepalive 訊息不會導致節點被視為關閉。

    預設值:10000

  • queue_index_embed_msgs_below:訊息的位元組大小,低於該大小,訊息將直接嵌入佇列索引中。建議你在更改之前閱讀 persister 調整文件。

    預設值:4096

  • msg_store_index_module:佇列索引的實現模組。建議你在更改之前閱讀 persister 調整文件。

    預設值:rabbit_msg_store_ets_index

  • backing_queue_module:佇列內容的實現模組。你可能不想改變它。

    預設值:rabbit_variable_queue

  • msg_store_file_size_limit:永續性的可調引數值。你幾乎肯定不應該改變這一點。

    預設值:16777216

  • mnesia_table_loading_timeout:等待群集中的 Mnesia 表可用時使用的超時。

    預設值:30000

  • queue_index_max_journal_entries:永續性的可調值。你幾乎肯定不應該改變這一點。

    預設值:65536

  • queue_master_locator:佇列主位置策略。可用的策略是:

    • <<"min-masters">>

    • <<"client-local">>

    • <<"random">>

    有關更多資訊,請參閱有關佇列主位置的文件。

    預設值:<<"client-local">>