热门标签 | 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次

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

在这里插入图片描述


推荐阅读
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 近期遇到电脑网络不稳定和游戏时频繁重启的问题,寻求专业建议。网络环境为ADSL调制解调器通过路由器共享给两台电脑使用,怀疑存在ARP攻击或硬件配置问题。希望获得详细的故障排查和解决方案。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 本文详细介绍了 MySQL 的查询处理流程,包括从客户端连接到服务器、查询缓存检查、语句解析、查询优化及执行等步骤。同时,深入探讨了 MySQL 中的乐观锁机制及其在并发控制中的应用。 ... [详细]
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社区 版权所有