RabbitMQ入門教程——安裝及配置

RabbitMQ是一個消息代理,一個消息系統的媒介,提供了一個通用的消息發送及接收平臺,而且可以保障消息傳輸過程當中的安全。使用erlang語言開發,開源,在易用性、擴展性、高可用性等方面表現不俗 html

技術亮點

  • 可靠性——RabbitMQ提供了多種技術可讓你在性能和可靠性之間進行權衡。這些技術包括持久性機制、投遞確認、發佈者證明和高可用性機制。
  • 靈活的路由——消息在到達隊列前是經過交換機進行路由的。RabbitMQ爲典型的路由邏輯提供了多種內置交換機類型。若是你有更復雜的路由需求,能夠將這些交換機組合起來使用,你甚至能夠實現本身的交換機類型,而且當作RabbitMQ的插件來使用。
  • 集羣——在相同局域網中的多個RabbitMQ服務器能夠聚合在一塊兒,做爲一個獨立的邏輯代理來使用。
  • 聯合——對於服務器來講,它比集羣須要更多的鬆散和非可靠連接。爲此RabbitMQ提供了聯合模型。
  • 高可用的隊列——在同一個集羣裏,隊列能夠被鏡像到多個機器中,以確保當其中某些硬件出現故障後,你的消息仍然安全。
  • 多協議——RabbitMQ 支持多種消息協議的消息傳遞。
  • 普遍的客戶端——只要是你能想到的編程語言幾乎都有與其相適配的RabbitMQ客戶端。
  • 可視化管理工具——RabbitMQ附帶了一個易於使用的可視化管理工具,它能夠幫助你監控消息代理的每個環節。
  • 追蹤——若是你的消息系統有異常行爲,RabbitMQ還提供了追蹤的支持,讓你可以發現問題所在。
  • 插件系統——RabbitMQ附帶了各類各樣的插件來對本身進行擴展。你甚至也能夠寫本身的插件來使用。

專業術語

Broker:簡單來講就是消息隊列服務器實體。 java

Exchange:消息交換機,它指定消息按什麼規則,路由到哪一個隊列。 node

Queue:消息隊列載體,每一個消息都會被投入到一個或多個隊列。 數據庫

Binding:綁定,它的做用就是把exchange和queue按照路由規則綁定起來。 編程

Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。 瀏覽器

vhost:虛擬主機,一個broker裏能夠開設多個vhost,用做不一樣用戶的權限分離。 安全

producer:消息生產者,就是投遞消息的程序。 服務器

consumer:消息消費者,就是接受消息的程序。 網絡

connection:鏈接,就是一個位於客戶端和Broker之間的TCP鏈接 dom

channel:消息通道,在客戶端的每一個鏈接裏,可創建多個channel,每一個channel表明一個會話任務。

Message:由Header和Body組成,Header是由生產者添加的各類屬性的集合,包括Message是否被持久化、由哪一個Message Queue接受、優先級是多少等。而Body是真正須要傳輸的消息內容。

消息隊列的使用過程大概以下:

(1)客戶端鏈接到消息隊列服務器,打開一個channel。

(2)客戶端聲明一個exchange,並設置相關屬性。

(3)客戶端聲明一個queue,並設置相關屬性。

(4)客戶端使用routing key,在exchange和queue之間創建好綁定關係。

(5)客戶端投遞消息到exchange。

exchange接收到消息後,就根據消息的key和已經設置的binding,進行消息路由,將消息投遞到一個或多個隊列裏。

exchange也有幾個類型,徹底根據key進行投遞的叫作Direct交換機,例如,綁定時設置了routing key爲"abc",那麼客戶端提交的消息,只有設置了key爲"abc"的纔會投遞到隊列。對key進行模式匹配後進行投遞的叫作Topic交換機,符號"#"匹配一個或多個詞,符號"*"匹配正好一個詞。例如"abc.#"匹配"abc.def.ghi","abc.*"只匹配"abc.def"。還有一種不須要key的,叫作Fanout交換機,它採起廣播模式,一個消息進來時,投遞到與該交換機綁定的全部隊列。

RabbitMQ支持消息的持久化,也就是數據寫在磁盤上,爲了數據安全考慮,我想大多數用戶都會選擇持久化。消息隊列持久化包括3個部分:

(1)exchange持久化,在聲明時指定durable => 1

(2)queue持久化,在聲明時指定durable => 1

(3)消息持久化,在投遞時指定delivery_mode => 2(1是非持久化)

若是exchange和queue都是持久化的,那麼它們之間的binding也是持久化的。若是exchange和queue二者之間有一個持久化,一個非持久化,就不容許創建綁定。

RabbitMQ下載地址

進入RabbitMQ官網 : http://www.rabbitmq.com/  點擊右側最新版本列表下載最新版本並安裝。

輸入如下命令能夠修改RabbitMQ的存儲目錄

D:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.6\sbin

rabbitmq-service.bat remove

set RABBITMQ_BASE=d:/RabbitMQ

rabbitmq-service.bat install

安裝RabbitMQWeb管理插件

rabbitmq-plugins enable rabbitmq_management

瀏覽器中打開http://127.0.0.1:15672測試是否安裝成功,用戶名密碼默認都是guest

進入後能夠看到RabbitMQ一些配置信息

RabbitMQ配置文件介紹

Key

Documentation

tcp_listeners

用於監聽 AMQP鏈接的端口列表(無SSL). 能夠包含整數 (即"監聽全部接口")或者元組如 {"127.0.0.1", 5672} 用於監聽一個或多個接口.

Default: [5672]

num_tcp_acceptors

接受TCP偵聽器鏈接的Erlang進程數。

Default: 10

handshake_timeout

AMQP 0-8/0-9/0-9-1 handshake (在 socket 鏈接和SSL 握手以後)的最大時間, 毫秒爲單位.

Default: 10000

ssl_listeners

如上所述,用於SSL鏈接。

Default: []

num_ssl_acceptors

接受SSL偵聽器鏈接的Erlang進程數。

Default: 1

ssl_options

SSL配置.參考SSL documentation.

Default: []

ssl_handshake_timeout

SSL handshake超時時間,毫秒爲單位.

Default: 5000

vm_memory_high_watermark

流程控制觸發的內存閥值.相看memory-based flow control 文檔.

Default: 0.4

vm_memory_high_watermark_paging_ratio

高水位限制的分數,當達到閥值時,隊列中消息消息會轉移到磁盤上以釋放內存. 參考memory-based flow control 文檔.

Default: 0.5

disk_free_limit

RabbitMQ存儲數據分區的可用磁盤空間限制.當可用空間值低於閥值時,流程控制將被觸發. 此值可根據RAM的總大小來相對設置 (如.{mem_relative, 1.0}). 此值也能夠設爲整數(單位爲bytes)或者使用數字單位(如."50MB"). 默認狀況下,可用磁盤空間必須超過50MB. 參考 Disk Alarms 文檔.

Default: 50000000

log_levels

控制日誌的粒度.其值是日誌事件類別(category)和日誌級別(level)成對的列表.

level 能夠是 'none' (不記錄日誌事件), 'error' (只記錄錯誤), 'warning' (只記錄錯誤和警告), 'info' (記錄錯誤,警告和信息), or 'debug' (記錄錯誤,警告,信息以及調試信息).

目前定義了4種日誌類別. 它們是:

  • channel -針對全部與AMQP channels相關的事件
  • connection - 針對全部與網絡鏈接相關的事件
  • federation - 針對全部與federation相關的事件
  • mirroring -針對全部與 mirrored queues相關的事件

Default: [{connection, info}]

frame_max

與客戶端協商的容許最大frame大小. 設置爲0表示無限制,但在某些QPid客戶端會引起bug. 設置較大的值能夠提升吞吐量;設置一個較小的值可能會提升延遲.

Default: 131072

channel_max

與客戶端協商的容許最大chanel大小. 設置爲0表示無限制.該數值越大,則broker使用的內存就越高.

Default: 0

channel_operation_timeout

Channel 操做超時時間(毫秒爲單位) (內部使用,由於消息協議的區別和限制,不暴露給客戶端).

Default: 5000

heartbeat

表示心跳延遲(單位爲秒) ,服務器將在connection.tune frame中發送.若是設置爲 0, 心跳將被禁用. 客戶端能夠不用遵循服務器的建議, 查看 AMQP reference 來了解詳情. 禁用心跳能夠在有大量鏈接的場景中提升性能,但可能會形成關閉了非活動鏈接的網絡設備上的鏈接落下.

Default: 60 (3.5.5以前的版本是580)

default_vhost

當RabbitMQ從頭開始建立數據庫時建立的虛擬主機. amq.rabbitmq.log交換器會存在於這個虛擬主機中.

Default: <<"/">>

default_user

RabbitMQ從頭開始建立數據庫時,建立的用戶名.

Default: <<"guest">>

default_pass

默認用戶的密碼.

Default: <<"guest">>

default_user_tags

默認用戶的Tags.

Default: [administrator]

default_permissions

建立用戶時分配給它的默認Permissions .

Default: [<<".*">>, <<".*">>, <<".*">>]

loopback_users

只能經過環回接口(即localhost)鏈接broker的用戶列表

若是你但願默認的guest用戶能遠程鏈接,你必須將其修改成[].

Default: [<<"guest">>]

cluster_nodes

當節點第一次啓動的時候,設置此選項會致使集羣動做自動發生. 元組的第一個元素是其它節點想與其創建集羣的節點. 第二個元素是節點的類型,要麼是disc,要麼是ram

Default: {[], disc}

server_properties

鏈接時向客戶端聲明的鍵值對列表

Default: []

collect_statistics

統計收集模式。主要與管理插件相關。選項:

  • none (不發出統計事件)
  • coarse (發出每一個隊列 /每一個通道 /每一個鏈接的統計事件)
  • fine (也發出每一個消息統計事件)

你自已可不用修改此選項.

Default: none

collect_statistics_interval

統計收集時間間隔(毫秒爲單位). 主要針對於 management plugin.

Default: 5000

auth_mechanisms

提供給客戶端的SASL authentication mechanisms.

Default: ['PLAIN', 'AMQPLAIN']

auth_backends

用於 authentication / authorisation backends 的列表. 此列表可包含模塊的名稱(在模塊相同的狀況下,將同時用於認證來受權)或像{ModN, ModZ}這樣的元組,在這裏ModN將用於認證,ModZ將用於受權.

在2元組的狀況中, ModZ可由列表代替,列表中的全部元素必須經過每一個受權的確認,如{ModN, [ModZ1, ModZ2]}. 這就容許受權插件進行組合提供額外的安全約束.

rabbit_auth_backend_internal外,其它數據庫能夠一般 plugins來使用.

Default: [rabbit_auth_backend_internal]

reverse_dns_lookups

設置爲true,可以讓客戶端在鏈接時讓RabbitMQ 執行一個反向DNS查找, 而後經過 rabbitmqctl 和 管理插件來展示信息.

Default: false

delegate_count

內部集羣通訊中,委派進程的數目. 在一個有很是多核的機器(集羣的一部分)上,你能夠增長此值.

Default: 16

trace_vhosts

 tracer內部使用. 你不該該修改.

Default: []

tcp_listen_options

默認socket選項. 你可能不想修改這個選項.

Default:

[{backlog, 128}, {nodelay, true}, {exit_on_close, false}]

hipe_compile

將此選項設置爲true,將會使用HiPE預編譯部分RabbitMQ,Erlang的即時編譯器.
這能夠增長服務器吞吐量,但會增長服務器的啓動時間.
你能夠看到花費幾分鐘延遲啓動的成本,就能夠帶來20-50% 更好性能.這些數字與高度依賴於工做負載和硬件.

HiPE 支持可能沒有編譯進你的Erlang安裝中.若是沒有的話,啓用這個選項,並啓動RabbitMQ時,會看到警告消息. 例如, Debian / Ubuntu 用戶須要安裝erlang-base-hipe 包.

HiPE並不是在全部平臺上均可用, 尤爲是Windows.

在 Erlang/OTP 17.5版本以前,HiPE有明顯的問題 . 對於HiPE,使用最新的OTP版本是高度推薦的.

Default: false

cluster_partition_handling

如何處理網絡分區.可用模式有:

  • ignore
  • pause_minority
  • {pause_if_all_down, [nodes], ignore | autoheal}where [nodes] is a list of node names
    (ex: ['rabbit@node1', 'rabbit@node2'])
  • autoheal

參考documentation on partitions 來了解更多信息

Default: ignore

cluster_keepalive_interval

節點向其它節點發送存活消息和頻率(毫秒). 注意,這與 net_ticktime是不一樣的; 丟失存活消息不會引發節點掉線

Default: 10000

queue_index_embed_msgs_below

消息大小在此之下的會直接內嵌在隊列索引中. 在修改此值時,建議你先閱讀  persister tuning 文檔.

Default: 4096

msg_store_index_module

隊列索引的實現模塊. 在修改此值時,建議你先閱讀  persister tuning 文檔.

Default: rabbit_msg_store_ets_index

backing_queue_module

隊列內容的實現模塊. 你可能不想修改此值.

Default: rabbit_variable_queue

msg_store_file_size_limit

Tunable value for the persister. 你幾乎確定不該該改變此值。

Default: 16777216

mnesia_table_loading_timeout

在集羣中等待使用Mnesia表可用的超時時間。

Default: 30000

queue_index_max_ journal_entries

Tunable value for the persister. 你幾乎確定不該該改變此值。

Default: 65536

queue_master_locator

Queue master 位置策略. 可用策略有:

  • <<"min-masters">>
  • <<"client-local">>
  • <<"random">>

查看documentation on queue master location 來了解更多信息.

Default: <<"client-local">>

Demo:

[{rabbit,[{tcp_listen_options,[{backlog,128},{nodelay,true},{linger,{true,0}}]}]}]

更多配置相關信息請參考:

http://www.blogjava.net/qbna350816/archive/2016/08/02/431415.html

http://www.rabbitmq.com/configure.html

相關文章
相關標籤/搜索