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