0%

rabbitmq系列-基础篇

一、概念

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