# 1. 什么是RabbitMQ?
RabbitMQ是消息中间件的一种,其基本成员包括:
-
Message
不具名的二进制串,它有消息头和消息体组成的。消息体不透明,消息头包含一系列可选属性,如路由键,优先级别,消息的可持久性等 -
Publisher
向交换器发送消息的应用程序。 -
Consumer
从消息队列中取消息的应用程序 -
Exchange
负责接收Producer发送过来的消息,并查询路由表将消息转发给指定的队列;;交换器有三种类型
- Direct交换器 :发布与订阅 完全匹配,routing-key相同的消息会路由到同一个队列中
- Topic交换器: 主题规则匹配,根据路由key进行模糊匹配
- fanout交换器: 广播模式,不需要路由键
-
Binging;
用于消息队列和交换器之间的关联。他们之间通过路由键(规则)来绑定 -
Queue
用于保存消息直至发送给Consumer -
Routing_key
消息发送到交换器时,会自带路由键属性,交换器根据绑定的路由规则将消息分发到制定队列 -
Connection
MQ服务器与应用程序之间的TCP连接 -
Channel
TCP里的虚拟连接,一条TCP连接可以创建多个信道,发布消息,接收消息,订阅都是在信道中进行的 -
Virtual host
虚拟主机,表示一批交换器、消息队列和相关对象;虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个vhost本质上就是一个mini版的RabbitMQ交换器,拥有自己的队列、交换器、绑定和权限机制。vhost是AMQP概念的基础,必须在链接时指定,RabbitMQ默认的vhost是“/”; -
Broker
消息队列服务器实体
2. RabbitMQ能做什么?
(1) 同步变异步
若以同步模式实现用户订单请求,则需要消耗200ms的时间,且各服务之间直接调用,相互紧耦合
(2) 解耦
可以使用多线程同时处理多个服务,解决一般的时间,但是服务之间仍然是直接调用的关系,相互依赖,不易于分离
使用MQ后,所有服务均与MQ之间关联,相互之间松耦合,且消息处理都是异步进行
(3) 流量销锋
当有几千几万的用户请求同时访问秒杀服务,每个请求处理都需要消耗一定时间,这种高并发的场景必然导致秒杀服务crash,加入了MQ后,用户请求都发送到队列中存储,不做处理,基本不耗时,然后分发给秒杀服务处理,当请求数量达到上限时,可转发给其他服务,比如提示“秒杀活动结束”等等