RabbitMQ是一個消息代理,一個消息系統的媒介,提供了一個通用的消息發送及接收平臺,而且可以保障消息傳輸過程當中的安全。使用erlang語言開發,開源,在易用性、擴展性、高可用性等方面表現不俗 html
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官網 : 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種日誌類別. 它們是:
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 |
統計收集模式。主要與管理插件相關。選項:
你自已可不用修改此選項. 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的即時編譯器. HiPE 支持可能沒有編譯進你的Erlang安裝中.若是沒有的話,啓用這個選項,並啓動RabbitMQ時,會看到警告消息. 例如, Debian / Ubuntu 用戶須要安裝erlang-base-hipe 包. HiPE並不是在全部平臺上均可用, 尤爲是Windows. 在 Erlang/OTP 17.5版本以前,HiPE有明顯的問題 . 對於HiPE,使用最新的OTP版本是高度推薦的. Default: false |
cluster_partition_handling |
如何處理網絡分區.可用模式有:
參考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 位置策略. 可用策略有:
查看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