1. 程式人生 > >Rabbitmq的簡單概述和原始碼部署

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 

下載地址

https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.7/rabbitmq-server-generic-unix-3.7.7.tar.xz

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客戶端,管理UIrabbitmqadmin(僅當啟用了管理外掛時

                     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說明

fanout轉發器,是幾種轉發器中轉發訊息最快的一種,其路由規則會將訊息轉發給與轉發器繫結的每一個佇列中,也就是輪循轉發相同訊息給佇列

direct轉發器,會根據當前傳送和接受端協商的統一的routing key來完全匹配轉發訊息,也就是轉發器傳送標有routing key標誌的路由資訊,只有接收端的binding keyrouting key與之相同,才會接收到資訊

topic轉發器,相對於direct轉發器,topic可以轉發符合多個條件的訊息,也就是傳送端傳送訊息,而接受端可以靈活配置接收訊息的路由規則,例如:msg.#msg.*,前者能夠接收msg.log.infomsg.log型別訊息,而後者則能接收到msg.*型別訊息,所以#號代表一個或多個單詞匹配,而*則代表一個單詞匹配了,實際上就是正常的規則過濾機制

headers轉發器,也是用的比較少的轉發器,原因請檢視第一部分介紹。此種轉發器,忽略了路由routing key規則,使用了健-值對形式匹配規則,此種轉發器規定,在接受端必須使用x-match,它目前有兩種型別:allany,前者代表所有的鍵-值都滿足後,才能收到資訊,而後者則滿足任意個就可以收到消,這個會在後續文章介紹,這裡只需瞭解即可

 

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。

##不要將旋轉日期設定為“”。如果需要“”值,請保