随笔记——MQ

news2024/11/14 19:48:58

文章目录

  • 1、 概要
  • 2、 为什么使用MQ/使用MQ的好处?
  • 3、 使用MQ的缺点?
  • 4、 使用MQ会产生的问题及解决办法?
    • 4.1、如何保证消息的顺序性?
    • 4.2、如何解决消息被重复消费?
    • 4.3、如何解决消息丢失?
    • 4.4、如何解决消息积压的问题?
    • 4.5、如何解决消息队列延迟以及过期失效的问题?
    • 4.6、如何解决数据不一致的问题?

1、 概要

在这里插入图片描述

2、 为什么使用MQ/使用MQ的好处?

  • **异步处理:**相比于传统的串行、并行方式,可以提高系统的吞吐量。
  • **应用解耦:**系统间通过消息通信,不用关心其他系统的处理。
  • **流量削峰:**可以通过消息队列长度控制请求量,可以缓解短时间内的高并发请求。
  • **日志处理:**可以解决大量日志传输。
  • **消息通讯:**消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯中。比如点对点消息队列或者聊天室。

3、 使用MQ的缺点?

  • 系统可用性降低: 系统引入的外部依赖越多,系统面对的风险越高。如MQ挂了,系统也就挂掉了。
  • **系统复杂性提高:**系统中引入MQ,如:如何保证没有重复消费?如何保证消息不丢失?如何保证消息的顺序性?等等一系列的问题。
  • **数据一致性问题:**系统A处理完传递给MQ直接返回了成功,用户以为就已经处理成功了,结果在 BCD系统中,BC系统中写库成功,而D系统写库失败,这样就导致数据不一致。

4、 使用MQ会产生的问题及解决办法?

4.1、如何保证消息的顺序性?

  • 生产者——MQServer——消费者 是一对一的关系

4.2、如何解决消息被重复消费?

**问题的产生:**在消息消费的过程中,如果出现失败的情况,通过补偿机制发送方会执行重试,重试的过程中就有可能产生重复的消息。
**问题解决:**换种说法就是如何保证消费端的幂等性(幂等性,就是一条命令,任意多次执行所产生的影响均与一次执行的影响相同),只要消费端具备了幂等性,那么重复消费消息的问题也就解决了。

4.3、如何解决消息丢失?

**问题的产生:**不论生产者、MQ服务器还是消费者都会产生消息丢失的问题。
**问题解决:**生产方增加一张消息发送表,生产者发送消息后会往消息发送表中插入一条数据状态标记为待确认,如果消费者消费成功后,调用生产者的api来更新该消息的状态为已确认。使用jod定时去检查消息发送表,如果存在状态是待确认的消息,则认为该消息已经丢失,重新发送消息。

4.4、如何解决消息积压的问题?

临时紧急扩容,增加消费端的数量,与此同时,降级一些非核心的业务。其次,要排查解决异常的问题,通过监控、日志等手段分析是否消费端的业务逻辑代码出现了问题从而优化消费端的业务处理逻辑。

4.5、如何解决消息队列延迟以及过期失效的问题?

RabbitMQ是可以设置过期时间的,如果消息在消息队列中积压超过一定的时间就会被RabbitMQ清理掉,这个数据就没了。这就造成了数据丢失,此时需要采取的一个方案是批量重导:过了高峰期,写一个临时程序,将丢失的数据一点一点查出来,然后重新灌入MQ里边,把丢失的数据补回来。

4.6、如何解决数据不一致的问题?

**保证数据最终一致性。**将消费失败的消息写入重试表中,通过jod定时进行重试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于turtle实现的新冠疫情传播模拟 附完整代码可直接运行

代码运行视频参考:https://www.bilibili.com/video/BV1hR4y1h7Te/?spm_id_from=333.999.0.0&vd_source=8f3cf4ad6c08a40d40ca6809c9c9e8ca 高阶版运行结果展示

基于Android的家校互动系统app

需求信息: 功能需求: 1:发通知、发作业 发通知和发作业,是学校教师特有的功能,教师可以通过平台进行通知和作业的发放,每当发一条信息,该班的所有人员便可以收到来自服务器的信息推送,提醒家长打…

经济下行压力下的销售行业,将数据效益最大化方能立于不败之地

2022年9月,世界经济论坛发布《首席经济学家展望》报告,并指出“当前每10位经济学家中,就有7位认为全球经济发生了一定程度的衰退。” 在整体下行的经济环境中,由于销售人员会获悉客户削减预算,推迟采购,或…

mysql服务nginx和firewalld代理实现

文章目录环境准备nginx代理mysql服务linux防火墙实现mysql流量转发工作中常常遇到只有某个特定服务器才能访问数据库的情况,这个时候为了解决团队同时访问数据库的问题可以采用nginx代理和linux防火墙流量转发的方式解决。实战测试如下:环境准备 准备一…

做题关键点--位操作符

x |(x1)去掉从右开始的第一个0 a^a0,异或遵循交换律,即只要存在偶数个a,这部分结果为0. a^0a 与0异或为本身 寻找奇数_牛客题霸_牛客网 不用加减乘除做加法_牛客题霸_牛客网 二进制进行加法运算时与十进制的思路是…

Qt之QtConcurrent无需使用低级线程原语编写多线程

几个要点: 通过QtConcurrent::run()返回的QFuture不支持取消、暂停,返回的QFuture只能用于查询函数的运行/完成状态和返回值。 请注意:该函数可能不会立即运行; 函数只有在线程可用时才会运行。 导入模块 在 C API changes 有关于 Qt Concu…

Linux常用命令——rename命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) rename 用字符串替换的方式批量改变文件名 补充说明 rename命令用字符串替换的方式批量改变文件名。 语法 rename(参数)参数 原字符串:将文件名需要替换的字符串; 目标字符串&#x…

GuLi商城-人人开源搭建前端项目

人人开源: 下载到本地并解压: VsCode打开解压好的项目: MAC安装Nodejs,略 参考:MAC(m1)-安装Nodejs_ZHOU_VIP的博客-CSDN博客 MAC打开终端: npm install类似maven下载所有的组件 报错: 解…

Vue基础10之插件、scoped与lang的样式

Vue基础10插件scoped与lang样式scopedlang样式安装lessless样式的使用总结插件 plugins.js: export default {install(Vue){console.log("Vue:",Vue)//全局过滤器Vue.filter(mySlice,function (value){return value.slice(0,5)})//定义全局指令Vue.directive(fbind,…

【数据结构】8.6 基数排序

文章目录基数排序定义基数排序算法基数排序算法分析基数排序定义 前述的各类排序方法都是建立在关键字啊比较的基础上,而分配类排序不需要比较关键字的大小,它是根据关键字中各位的值,通过对待排序记录进行若干趟分配与收集来实现排序的&…

微信小程序 Springboot卫生应急培训报名系统java

本文以微信开发者、Springboot框架、java为开发技术,实现了一个卫生应急培训小程序。卫生应急培训小程序的主要使用者分为管理员服务端和用户客户端,其中管理员服务端权限:首页、个人中心、用户管理、通知公告管理、在线学习管理、培训管理、…

中国电子学会2021年09月份青少年软件编程Python等级考试试卷一级真题(含答案)

青少年软件编程(Python)等级考试试卷(一级) 分数:100.00 题数:37 一、单选题(共25题,每题2分,共50分) 1. 取整除的运算符是?&#x…

每天一道大厂SQL题【Day02】

每天一道大厂SQL题【Day02】 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题,以每日1题…

nuxt.js项目搭建

nuxt[文档数据] https://www.xuanmo.xin/details/3240 nuxt文档:https://zhuanlan.zhihu.com/p/76703748 nuxt文档:https://www.cnblogs.com/chanwahfung/p/12899714.html axios:https://axios.nuxtjs.org/ 参考:https://www.w3cschool.cn/nuxtjs/nuxtjs-b4kl36fw.html 案例实现…

编程的GCRoot应该怎么去找?

本文导读 本文通过抛出一个编程的上帝视角问题,我们了解什么是编程的上帝视角,编程如何学习以及编程的root是什么,找到root之后,我们有如何利用上帝视角去解决编程中的推理。 一、编程的上帝视角 上帝视角乃是叙述视角中&#…

23.网络编程(一)

目录 一.网络编程 1.1 什么是网络编程 1.2 网络通信基本模式 1.3 网络通信三要素 1.4 IP地址 1.4.1 什么是IP地址 1.4.2 IP的常见分类 1.4.3 IP地址基本寻路 1.4.4 IP地址形式 1.4.5 IP常用命令(在命令提示符窗口中使用) 1.4.6 特殊IP地址 1…

Docker安装Postgresql

测试环境:Centos7.x docker1.13.1 postgres12本文使用的是在镜像仓库直接pull的方式,非Dockfile的方式。Postgresql的Dockerfile参考:https://github.com/docker-library/postgres/blob/master/12/alpine/Dockerfile常用命令docker命令大全…

MySQL的卸载

步骤1:停止MySQL服务 在卸载之前,先停止MySQL8.0的服务。右击“此电脑“,选择”管理“,可以在“服务”列表找到“MySQL8.0”的服务,如果现在“正在运行”状态,可以右键单击服务,选择“停止”选…

java基础巩固-宇宙第一AiYWM:为了维持生计,大数据之Kafka【Kafka的概念、单机及集群部署】~整起

Rust一、Kafka基本概念1.Kafka是什么?Kafka与Flume?2.Kafka的整体架构:3.kafka的生产者与消费者:4.kafka的Topic与日志、分区【分区可以提高咱们kafka的写入能力和存储能力】5.kafka的顺序写入:6.kafka的零拷贝技术7.k…

MQ 队列消息

消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成,通过提供消息传递和消息排队模型,它可以在分布式环境下拓展进程间的通信,对于消息中间件,常见的角色大致也就有Producer(生产者).Consumer(消费者) MQ 消息中间件 消息队列 …