- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
RabbitMQ 的应用场景以及基本原理介绍
1.背景
RabbitMQ 是一个由 erlang 开发的 AMQP(Advanved Message Queue) 的开源实现。
应用场景
2.1 异步处理
场景说明: 用户注册后, 需要发注册邮件和注册短信 ,传统的做法有两种 1. 串行的方式 ;2. 并行的方式
串行方式 :将注册信息写入数据库后 ,发送注册邮件 ,再发
送注册短信 ,以上三个任务全部完成后才返回给客户端。 这有一个问题是 ,邮件 ,短信并不是必须的 ,它只是一个通知 ,而
这种做法让客户端等待没有必要等待的东西.
并行方式 :将注册信息写入数据库后 ,发送邮件的同时 ,发送短信 ,以上三个任务完成后 ,返回给客户端 ,并行的方式能提高处理的时间。
假设三个业务节点分别使用 50ms, 串行方式使用时间
150ms, 并行使用时间 100ms 。虽然并性已经提高的处理时
,但是 ,前面说过 ,邮件和短信对我正常的使用网站没有任何
影响,客户端没有必要等着其发送完成才显示注册成功 ,英爱是写入数据库后就返回 .
消息队列
引入消息队列后, 把发送邮件 ,短信不是必须的业务逻辑异步处理
由此可以看出 ,引入消息队列后, 用户的响应时间就等于写入数据库的时间 +写入消息队列的时间 (可以忽略不计 ),引入消息队列后处理后 ,响应时间是串行的 3 倍 ,是并行的 2 倍。
2.2 应用解耦
场景:双 11 是购物狂节 ,用户下单后 ,订单系统需要通知库存
系统 ,传统的做法就是订单系统调用库存系统的接口 .
这种做法有一个缺点 :
当库存系统出现故障时 ,订单就会失败。 (这样马云将少赚好
多好多钱 ^ ^) 订单系统和库存系统高耦合 .
引入消息队列
订单系统 :用户下单后 ,订单系统完成持久化处理 ,将消息写入
消息队列 ,返回用户订单下单成功。库存系统 :订阅下单的消息,获取下单消息 ,进行库操作。
就算库存系统出现故障 ,消息队列也能保证消息的可靠投递 , 不会导致消息丢失 (马云这下高兴了 ). 流量削峰
流量削峰一般在秒杀活动中应用广泛
场景 :秒杀活动,一般会因为流量过大,导致应用挂掉 ,为了解决这个问题,一般在应用前端加入消息队列。
作用 :
1. 可以控制活动人数, 超过此一定阀值的订单直接丢弃 (我为
什么秒杀一次都没有成功过呢 ^^)
可以缓解短时间的高流量压垮应用 (应用程序按自己的最大处理能力获取订单 )
用户的请求 ,服务器收到之后 ,首先写入消息队列 ,加入消息队列长度超过最大值 ,则直接抛弃用户请求或跳转到错误页面.
2. 秒杀业务根据消息队列中的请求信息,再做后续处理 .
系统架构
几个概念说明 :
Broker: 它提供一种传输服务 ,它的角色就是维护一条从生产
者到消费者的路线,保证数据能按照指定的方式进行传输 ,
Exchange :消息交换机 ,它指定消息按什么规则 ,路由到哪个
队列。
Queue: 消息的载体 ,每个消息都会被投到一个或多个队列。
Binding: 绑定,它的作用就是把 exchange 和 queue 按照路
由规则绑定起来 .
Routing Key: 路由关键字 ,exchange 根据这个关键字进行消
息投递。
vhost: 虚拟主机 ,一个 broker 里可以有多个 vhost ,用作不同
用户的权限分离。
Producer: 消息生产者 ,就是投递消息的程序 .
Consumer: 消息消费者 ,就是接受消息的程序 .
Channel: 消息通道 ,在客户端的每个连接里 ,可建立多个
channel.
任务分发机制
4.1Round-robin dispathching 循环分发
RabbbitMQ 的分发机制非常适合扩展 ,而且它是专门为并发程序设计的 ,如果现在 load 加重 ,那么只需要创建更多的
Consumer 来进行任务处理。
4.2Message acknowledgment 消息确认
为了保证数据不被丢失 ,RabbitMQ 支持消息确认机制 ,为了
保证数据能被正确处理而不仅仅是被 Consumer 收到 ,那么
我们不能采用 no-ack ,而应该是在处理完数据之后发送 ack.
在处理完数据之后发送 ack, 就是告诉 RabbitMQ 数据已经被接收 ,处理完成 ,RabbitMQ 可以安全的删除它了 .
如果 Consumer 退出了但是没有发送 ack, 那么 RabbitMQ 就会把这个 Message 发送到下一个 Consumer ,这样就保证在 Consumer 异常退出情况下数据也不会丢失 .
RabbitMQ 它没有用到超时机制 .RabbitMQ 仅仅通过 Consumer 的连接
您可能关注的文档
最近下载
- 复旦大学介绍-PPT简介(经典版).pptx VIP
- 安徽省马鞍山市2020-2021学年九年级上学期期中物理试卷(word版 含答案).docx VIP
- 2025年儿科三基三严考试题库.doc VIP
- 品管圈PDCA参赛作品-血透中心提升维持性血液透析患者钙磷甲状旁腺激素合格率医院品质管理案例(1).pptx
- 2025耐碳青霉烯类革兰氏阴性杆菌感染的诊治和防控指南推荐意见(全文).pdf VIP
- 二零二三年 优质公开课10的认识.ppt VIP
- 基于统计方法的我国上市公司信用风险评估模型研究.pdf VIP
- 沙场转让合同协议书.docx VIP
- 数字医学专业介绍.pptx VIP
- 中国共产党纪律处分条例.pptx VIP
文档评论(0)