1.什么是MQ?
消息队列,又叫做消息中间件。是指用高效可靠的消息传递机制进行与平台无关的 数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模 型,可以在分布式环境下扩展进程的通信(维基百科)。
2.为什么要使用MQ?
简单三个词:异步通信、系统解耦、流量削峰
异步通信:
某些场景下我们不需要立刻获取到结果,只是需要告诉程序去处理而已,例如,用户购买了商品 我们要给用户 增加积分,这件事不需要立刻处理,只需要告诉程序,来,我这有个用户的积分需要增加下,MQ帮你记下,另外一个专门处理用户积分的系统再从MQ这里拿到 记录,做用户积分增加的操作。
系统解耦:
还是购买商品,用户拿到商品后觉得商品不好,要七天无理由退货,那么涉及到 退款、恢复库存、发送通知消息,这些步骤没有一定的前后顺序关系,那么只要用户退货的消息发送到 MQ,退款的退款,恢复库存恢复,发送消息的发送消息,不会因为 其中一个步骤失败而导致其他不能执行。
流量削峰:
购买商品场景下,瞬时流量太大,可以让请求进入MQ,系统根据自身处理能力处理,防止系统崩溃。
3.消息队列带来了什么问题?
可用性降低:
原来的系统保证自己稳定就可以保证服务正常提供,现在还需要保证 MQ 的稳定,一旦MQ崩溃,所有业务都会收到影响。
系统复杂度增加:
一旦引入MQ,就需要考虑 消息丢失问题、重复消息问题、消费一致性问题,不单单只考虑本系统的问题,MQ 出现的问题也会导致全局的崩溃。
4.RabbitMQ 的特性
- 高可靠,通过各种机制 让用户在性能和可靠性中权衡。
- 支持多客户端,java、Python、Go 等主流语言。
- 集群和高扩展性,多节点组成集群。
- 数据安全,支持使用镜像队列保证数据安全。
- 权限管理,用户和虚拟机绑定。
- 支持插件并提供了各种插件 支持自定义插件。
- 与Spring 集成,封装性好,使用方便。
5.AMQP协议是什么?
http://www.amqp.org/sites/amqp.org/files/amqp.pdf
AMQP是一种高级消息队列协议(Advanced message queuing protocol),是一个工作应用层的协议。
除了 AMQP 之外,RabbitMQ 支持多种协议,STOMP、MQTT、HTTP and WebSockets。
6.RabbitMQ 工作组件
Broker
安装完RabbitMQ,整个MQ的服务我们就把它看作一个 Broker(中间人)。
VHost
内置的虚拟主机机制,实现数据的隔离,可以给不同的用户绑定不同的虚拟主机,各自在自己的虚拟主机中使用 Exchange、Queue,默认的虚拟主机为 \。
Connection
每个客户端和MQ通信都需要建立一个TCP长连接,这里定义为 Connection。
Channel
为了防止用户频繁创建和销毁TCP连接,虚拟出了Channel。
Queue
Queue 是真正存储消息的地方,它可以存储在内存中,当然支持存储到内置的(mnesia)数据库,消费者对 Queue 消息的获取支持两种方式 分别是 push,有消息了服务器主动向客户端推送;pull,消费者端基于事件监听机制实时获取消息。
Exchange
消息不是由生产者直接发送到 Queue,而是由 Exchange 路由的方式 灵活地发送到不同的 Queue,分别提供了三种类型的Exchange:Direct、Topic、Fanout。
7.Exchange提供的路由方式
Direct:
直连 Direct 和 Queue 以 binding key 为标识直接绑定
评论区