目录
一、MQ是什么?
二、MQ的使用场景
2.1 异步处理
🚀 易错概念讲解
场景说明:用户注册后,需要发注册邮件和注册短信。
🌴 传统的做法
(1)串行的方式
(2)并行方式
🔥 分析
🌵 使用消息队列
🔥 分析:
2.2 应用解耦
场景说明:用户下单后,订单系统需要通知库存系统。
🌴 传统做法
订单系统调用库存系统的接口。如下图:
🌵 使用消息队列
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。
2.3 流量削锋
应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。
a、可以控制活动的人数
b、可以缓解短时间内高流量压垮应用
用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。
秒杀业务根据消息队列中的请求信息,再做后续处理
2.4 日志处理
日志采集客户端:负责日志数据采集,定时写受写入Kafka队列。
Kafka消息队列:负责日志数据的接收,存储和转发。
日志处理应用:订阅并消费kafka队列中的日志数据 。
2.5 消息通讯
🚀 点对点通讯:
客户端A和客户端B使用同一队列,进行消息通讯。
🚀 聊天室通讯:
客户端A,客户端B,客户端N订阅同一主题,进行消息发布和接收。实现类似聊天室效果。
以上实际是消息队列的两种消息模式,点对点或发布订阅模式。
三、使用MQ的好处
(1)降低了两台服务器之间的耦合,哪怕是一台服务器挂了,另外一台服务器也不会报错或者休克,因为其监听的是MQ,只要服务器恢复再重新连上MQ发送消息,监听服务器就能再次接收。
(2)MQ作为一个仓库,本身就提供了非常强大的功能,例如不再是简单的一对一功能,还能一对多,多对一,类似补保险箱场景,只要有特定的密码,谁都能存,谁都能取。也就是说能实现群发消息和以此衍生的功能。
(3)普遍化的持久化功能,当MQ挂掉可以存储在磁盘等下重启恢复。(需要设置)
四、RabbitMQ介绍
五、为什么要选择RabbitMQ?
我们常见的消息中间件其实不单单只有RabbitMQ,还有ActiveMQ、Kafka以及RocketMQ等。以下就是我们选中RabbitMQ的理由:
六、RabbitMQ 特点
(1)可靠性
(2)灵活的路由
(3)消息集群
(4)高可用
(5)多种协议
(6)多语言客户端
(7)管理界面
(8)跟踪机制
(9)插件机制
七、RabbitMQ的基本概念
🚀 Producer:消息的生产者,也是一个向交换器发布消息的客户端应用程序。
🚀 Consumer:消息的消费者,表示一个从一个消息队列中取得消息的客户端应用程序。
🚀 Broker:接受客户端的链接,实现AMQP实体的服务。
🚀 Connection:生产者、消费者与broker之间的TCP链接。
🚀 Channel:如果每一次访问RabbitMQ都建立一个connection,在有消息量大的时候建立大量的TCP链接的开销太大,效率也低。channel是在connection内部建立的逻辑链接,channel之间完全隔离,这样就减少了系统频繁创建TCP链接的开销。
🚀 Exchange:message到达broker的第一站,根据分发规则,匹配routing key,将消息分发到queue中去。常用的类型有direct(点对点)、topic(规则匹配)、fanout(广播)。
🚀 Queue:消息最终被送到这里等待consumer。
🚀 Binding:exchange和queue之间的虚拟链接,binding中包含routing key,binding信息保存到exchange的查询表中,用于message的分发。
🚀 Virtual host:出于多租户和安全因素,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost中创建exchange、queue等。
小结
以上就是【一心同学】整理的【消息队列MQ】以及其【RabbitMQ】的讲解了,看完【一心同学】的陈述,是不是对【RabbitMQ】不再陌生了,在接下来我博客里,我将会继续讲解【RabbitMQ的更多操作】。