一、概念
RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现
exchange:
生产者将消息发送到 Exchange(交换器),由 Exchange 将消息路由到一个或多个 Queue 中(或者丢弃)。Exchange 并不存储消息。RabbitMQ 中的 Exchange 有 direct、fanout、topic、headers 四种类型,每种类型对应不同的路由规则。
queue:
队列是 RabbitMQ 的内部对象,用于存储消息。消息消费者就是通过订阅队列
来获取消息的,RabbitMQ 中的消息都只能存储在 Queue 中,生产者生产消息并最终投递到Queue 中,消费者可以从 Queue 中获取消息并消费。多个消费者可以订阅同一个 Queue,这时 Queue 中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。
connection:
connection就是一个TCP的连接。Producer和Consumer都是通过TCP连接到RabbitMQ Server的。程序的起始处就是建立这个TCP连接。
channels:
虚拟连接。它建立在上述的TCP连接中。数据流动都是在Channel中进行的。也就是说,一般情况是程序起始建立TCP连接,第二步就是建立这个Channel。
那么,为什么使用Channel,而不是直接使用TCP连接?
对于OS来说,建立和关闭TCP连接是有代价的,频繁的建立关闭TCP连接对于系统的性能有很大的影响,而且TCP的连接数也有限制,这也限制了系统处理高并发的能力。但是,在TCP连接中建立Channel是没有上述代价的。对于Producer或者Consumer来说,可以并发的使用多个Channel进行Publish或者Receive。
VirtualHost:
权限控制的基本单位,一个 VirtualHost 里面有若干 Exchange 和MessageQueue,以及指定被哪些 user 使用
routing key:
生产者在将消息发送给exchange的时候,一般会指定一个routing key,来匹配这个消息的路由规则。其实是匹配exchnage与queue绑定的bbinding key
binding key :
用于绑定exchange与queue之间的关系
二、windows安装
1)下载安装erlang
2)下载安装rabbitmq
3)安装管理界面(插件)
进入rabbitmq安装目录sbin中,调起cmd界面输入:rabbitmq-plugins enable rabbitmq_management
4)重启rabbitmq服务
5)访问地址127.0.0.1:15672,默认账号密码都为guest
三、docker启动
1) 搜索镜像:docker search rabbitmq
2) 下载镜像:docker pull rabbitmq:management
3) 创建容器,rabbitmq 需要有映射以下端口: 5671 5672 4369 15671 15672
25672
- 15672 management管理端监听端口
- 5672、5671 AMQP使用端口
- 4369 epmd代表erlang守护进程的端口
- 25672 (Erlang distribution)
1 | docker run -di --name=my_rabbitmq -p 5671:5617 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq:management |
四、exchange type
1)直连模式-direct:
direct类型的exchange路由规则也很简单,它会把消息路由到那些binding key与routing key完全匹配的queue中 。
默认交换器(名称为空字符串的直连交换机),一个queue若不指定binding的交换机,就被绑定到默认交换机上,binding key为queue的名称。
2)主题模式-topic
topic类型的Exchange在匹配规则上进行了扩展,它与direct类型的Exchage相似,也是将消息路由到binding key与routing key相匹配的Queue中,但这里的匹配规则有些不同, 可以根据某些规则进行匹配,如果 exchange 没有发现能够与 routing Key 匹配的 queue,则会抛弃此消息
符号 # 匹配一个或多个词,符号 * 匹配一个词
3)分裂模式-fanout
fanout类型的exchange路由规则非常简单,它会把所有发送到该exchange的消息路由到所有与它绑定的queue中
4)头部模式-headers
headers类型的exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。在绑定queue与exchange时指定一组键值对;当消息发送到exchange时,rabbitMq会取到该消息的headers(也是一个键值对的形式),对比其中的键值对是否完全匹配queue与exchange绑定时指定的键值对;如果完全匹配则消息会路由到该queue,否则不会路由到该queue
5)延迟消息(特殊模式需要安装插件)
需要在这个页面:http://www.rabbitmq.com/community-plugins.html 中找到rabbitmq_delayed_message_exchange
插件,根据您使用的RabbitMQ版本选择对应的插件版本下载即可 。 在下载好之后,解压得到.ez
结尾的插件包,将其复制到RabbitMQ安装目录下的plugins
文件夹 。
然后通过命令行启用该插件:
1 | rabbitmq-plugins enable rabbitmq_delayed_message_exchange |