热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

消息中间件使用场景

消息中间件谈谈开发中应用消息中间件的场景?或适用的场景?适合场景:不需要实时性的可以达到什么效果:1,

消息中间件


谈谈开发中应用消息中间件的场景?或适用的场景?

适合场景:不需要实时性的

可以达到什么效果:


  • 1,解耦
  • 2,异步化
  • 3,限流消峰

案例

1,商品管理(静态页面+搜索页面)

在这里插入图片描述以上是同步的方式

消耗的时间: T1+T2+T3

处于耦合状态:某个系统有问题,会有影响,或者新增一个系统,也会影响到我们的代码

并不符合我们说的设计原则:OCP原则,开闭原则

解耦:
在这里插入图片描述时间:T1+t1

处于解耦的状态

2,基础服务,都已经采用异步的方式来为其他系统提供服务(短信,邮件,积分等等)

在这里插入图片描述
在这里插入图片描述
3,限流削峰

就是前后两个交互的系统处理的速度不匹配,为了保护处理慢的系统,从而引入消息中间件,来实现削峰限流处理
方案一:异步写的方案,保护数据库,缓解瞬间写的压力
在这里插入图片描述
方案二:再比如秒杀系统,会产生很多的订单信息,此时也可以通过MQ来保护订单系统。

限流好处:节省服务器成本

在这里插入图片描述


如何保证消息的可达或不丢失?

1,背景:

网络是不可靠的

像我们上面所描述的各种场景,一旦消息出现丢失,将会造成各种问题。比如邮件没有发送,短信没有收到等等。

2,解决方案:

确认机制+补偿发送

这个问题需要分为多个节点来考虑

在这里插入图片描述

这里面的每个环节出问题都有可能造成消息的不可达,所以,我们需要保证针对每个环节设计解决方案

1,消息要发送到MQ服务器

解决的方式有两种:

方式一:事物的方式(了解即可,性能不佳)

方式二:异步confirm模式,推荐,客户端通过设置cnfirm监听器,获取MQ服务器的异步响应。

如果消息成功传递到MQ服务器,则服务器会传递回ACK=true,否则ACK=false

在这里插入图片描述在这里插入图片描述

2, return机制,保证消息到了MQ服务器之后,是否能正确路由到交换机或者队列,这个是在正常情况下是不会发生的,所以一般在开发中我们会忽略掉这个设置

3,消息队列做持久化

消息成功传递到MQ服务器之后,还需要对消息队列做持久化,否则一旦消息服务器宕机,那么未处理的消息将会丢失

4,消费端的手工确认模式开启,只有消费端手工确认之后,才表示这个消息已经被正确处理了

这个环节是确保消息真的被消费端正确处理了,如果没有被正确处理,那么消息还是需要重新处理的。

1,有可能MQ服务器没有收到消费端发送的确认消息,会重复处理,所以要保证接口的幂等性,

2,为了避免重复处理不成功,造成阻塞,所以,我们引入有固定次数的重试机制 (失败的情况)

当然为了避免消息重复处理依然失败的情况,我们一般设置为重复处理三次,如果三次还是有问题,

则应该讲错误信息记录到日志中,然后人工介入处理。避免堵塞到后面的消息处理。


什么是延迟队列?

作用:

需要延迟处理的消息,我们将使用延迟队列来达到这个效果

背景:

比如订单超时未支付,我们需要取消订单,解锁库存。

实现方案:

方案一:采用定时任务

通过定时任务扫描订单表,判断订单的下单时间跟当前时间的时间差,如果超过指定时间,比如30分钟,则取消订单。但是这个方案存在问题,就是频繁扫描订单表,会给数据库带来较大的压力

一秒一次 30*60=1800次

方案二:采用消息队列提供的延迟队列,跟数据库的交互只需要一次
消息超过了有效期,没有人处理,就称为死信

在这里插入图片描述


推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • RabbitMq之发布确认高级部分1.为什么会需要发布确认高级部分?在生产环境中由于一些不明原因,导致rabbitmq重启,在RabbitMQ重启期间生产者消息投递失败,导致消息丢 ... [详细]
  • RabbitMQ的消息持久化处理
    1、RabbitMQ的消息持久化处理,消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢——消息持久化。2、auto ... [详细]
  • 消息中间件RabbitMQ 高级特性之消费端ACK与重回队列
    什么是消费端的ACK和重回队列?消费端的手工ACK和NACK消费端进行消费的时候,如果由于业务异常我们可以进行日志的记录,然后进行补偿如果由于服务器宕机等严重问题 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 6(自)、交换机之关键字模式
    上一节中的我们的日志系统将所有消息广播给所有消费者,对此我们想做一些改变,例如我们希望将日志消息写入磁盘的程序仅接收严重错误(error),而不存储那些警告(warnning)或者 ... [详细]
  • php网站设计实验报告,php网站开发实训报告
    本文目录一览:1、php动态网站设计的关键技术有哪些软件,及搭建步骤需要哪些页面,分别完成 ... [详细]
author-avatar
手机用户2602923361
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有