本文来说下消息中间件常见问题

文章目录

  • 为什么消息中间件能够解决流量削峰问题
  • 如何保证消息不重复消费(如何保证消息的幂等性问题)
  • 如果MQ服务器出现消息堆积的情况下如何处理
  • 消息队列中数据有问题,导致客户端报错如何解决
  • 如果MQ服务器满了如何处理
  • mq突然产生了消息堆积?mq会崩溃吗?
  • mq消费者如果不在的情况下,生产者投递消息会丢失吗?
  • mq有多个消费者消费,会重复消费吗?
  • MQ如何保证消息的顺序问题?

为什么消息中间件能够解决流量削峰问题

流量削峰是解决我们的高并发问题。当有大量的请求进入到服务器的时候,会导致服务器的压力很大,甚至会崩掉。可以使用限流的方式,但这样会增加代码量。

Mq有以下优点,可以解决生产者和消费者的问题

A、Mq可以减少主流程的业务,减少客户端的等待时间。
B、mq有阈值设置,可以防止无限量的涌入。达到阈值后拒绝接收(不确定)
C、Mq不会立马给消费者,消费不了就会进入队列,先进先出
D、消费者可以配置多个,这样就解决了队列的等待。


如何保证消息不重复消费(如何保证消息的幂等性问题)

消息重试:—出现异常或长时间未响应,队列就会重试

a、消费者在规定的时间内或者抛出了异常的情况下,导致结果没有响应给消息队列
b、消息队列在没收到结果的情况下就会重试,进而导致重复消费的问题

解决方案:

a、生产者在消息头中设置全局唯一的业务ID,比如消息ID或订单号之类的
b、消费者根据全局唯一的业务ID,判断是否处理过该逻辑,如果处理过就告诉MQ消费成功,不再继续重试。

是否会出现重试的请求和第一次请求产生并发冲突

重试一般的情况下都是有间隔的,一起执行相同代码的概率极低,基本上是可以不用考虑的。


如果MQ服务器出现消息堆积的情况下如何处理

产生原因:

a、生产者向消费者投递和消费的速率不匹配导致。
b、消费者挂了,导致队列阻塞。

解决办法:核心—提高系统吞吐量才是关键

a、增加broker分区缓存不同的消息/增加MQ的队列数
b、消费者应该使用集群,提高消费的速率
c、生产者投递消息到MQ服务器如果满的情况下,直接换入死信队列,由死信消费者消费。
d、执行客户端回调监听的方法将消息存放到数据库记录,后期实现补偿

Tips:

死信队列所有的队列都是有的,属于备胎,也有消费者消费的。
如果MQ的内存、硬盘都满了,那死信队列也是没用的,备胎都没了。


消息队列中数据有问题,导致客户端报错如何解决

消息队列中数据有问题,导致客户端报错如何解决

a、消费者代码异常(解析报文出现问题等),则将该消息存放到数据库或死信队列中,等后期代码修复后在解决,MQ不需要对我们消费者实现重试。
b、消费者代码链接数据库、redis或接口调不通的情况下,可以抛出异常,让MQ自动重试。


如果MQ服务器满了如何处理

记录生产者投递的消息日志,后期采用定时job自动化补偿。日志方式可以是磁盘、数据库、nosql等。


mq突然产生了消息堆积?mq会崩溃吗?

不会,因为mq大都有阈值设置,超过了就拒绝接收。


mq消费者如果不在的情况下,生产者投递消息会丢失吗?

不会,mq队列会自动保存。


mq有多个消费者消费,会重复消费吗?

不会,如果存在多个的话,会存在轮询消费,无论是点对点还是工作队列,还是其他各种类型。


MQ如何保证消息的顺序问题?

MQ如何保证消息的顺序问题?

1、如果我们的生产者往MQ投递消息行为不一样,可能会产生消息顺序的问题,如果我们投递的消息到同一个队列中行为是一样的情况下,没有必要在意消息顺序的问题。
2、我们的MQ存放消息默认的情况下本身就有一定的顺序,遵循先进先出的原则(单个MQ情况下)
3、如果我们有多个消费者订阅同一个队列的情况下,可能会产生消费者顺序被打乱
4、如果我们的Broker是集群的情况下,因为不同的消息可能会存放多个不同的Broker中,单个消费者在获取消息的时候顺序可能会被打乱。

解决消息顺序的核心思路:

保证我们的消息存放到同一个Broker中,对应只有一个消费者实现消费;

备注:kafka对我们的消息设置相同给到key,key可以根据业务来定。

但是我们的单个消费者消费消息吞吐非常低,可以采用消费者批量获取我们的消息,然后采用内存队列实现存放。(也会根据消息的key计算,相同的key存放到同一个内存队列中),每个内存队列只会对应的一个线程实现处理。

消息中间件常见问题汇总相关推荐

  1. exec不同文件l怎么汇总_ABAQUS常见问题汇总 - 2.0版.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspC/C++资料 ABAQUS常见问题汇总 - 2.0版.doc1 ...

  2. 使用maven下载依赖包及maven常见问题汇总

    最近下载了SPRING3.1.4,发现只有SPRING相关的源码,没有其依赖的jar包.SPRING依赖的jar相当多,自己一个一个的下载比较费劲,就仔细阅读了SPRING下载说明,新版本的SPRIN ...

  3. java 遇到的问题_Java常见问题汇总(一)

    原标题:Java常见问题汇总(一) 每天在写Java程序,其实里面有一些细节大家可能没怎么注意,这不,有人总结了一个我们编程中常见的问题.虽然一般没有什么大问题,但是最好别这样做.另外这里提到的很多问 ...

  4. 系统部署常见问题汇总

    系统部署常见问题汇总 文章目录 系统部署常见问题汇总 引用文件路径问题 前端代码兼容IE问题 IE不支持Promise问题 IE浏览器GET请求缓存问题 前端代码混淆问题 npx的使用 IE兼容new ...

  5. 集成 jpush-react-native 常见问题汇总 ( iOS 篇)

    给 iOS 应用添加推送功能是一件比较麻烦的事情,本篇文章收集了集成 jpush-react-native 的常见问题,目的是为了帮助用户更好地排查问题 1.收不到推送 确保是在真机上测试,而不是在模 ...

  6. fastText中常见问题汇总

    fastText中常见问题汇总: 1.什么是fastText fastText是一个用于文本分类和词向量表示的库,它能够把文本转化成连续的向量然后用于后续具体的语言任务,目前教程较少! 2.为什么训练 ...

  7. 软考考后常见问题汇总

    摘要:软考考后常见问题汇总,查询成绩.证书领取.考试复核等 一.考试分数线什么时间出?合格分数线会不会有变化? 答:合格分数线出成绩一个月左右,如2020年12月18日出成绩,2021年1月11日出合 ...

  8. oracle 数据库问题,ORACLE数据库常见问题汇总,oracle常见问题汇总

    ORACLE数据库常见问题汇总,oracle常见问题汇总 提交事务的时候提示(数据库被一个用户锁住的解决方法) select object_id,session_id,locked_mode from ...

  9. tcp当主动发出syn_一文读懂TCP四次挥手工作原理及面试常见问题汇总

    简述 本文主要介绍TCP四次挥手的工作原理,以及在面试中常见的问题. 字段含义 seq序号:Sequence Number,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行 ...

最新文章

  1. itx机箱尺寸_乔思伯发布ITX机箱V8,采用独特抽拉式结构
  2. go 结构体排序的几种方法
  3. UVA10129 Play on Words (并查集判连通+欧拉回路)
  4. php cdi_CDI和EJB:在事务成功时发送异步邮件
  5. python中的引用怎么理解_Python函数通过引用调用
  6. 第 8 章 配置listener监听器
  7. 什么是堆栈?内存中划分出按FIL0方式操作的特殊区域,叫做堆栈
  8. CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了
  9. Sigmod/Softmax变换
  10. latex 引用网页 网址 网站 格式
  11. VC MakeUp 操作XML
  12. jdk32位安装包下载_PS2018下载AdobePhotoshopCC2018安装激活教程
  13. matlab中gain是什么,PID调理中的GAIN是啥意思?
  14. Scene窗口—Scene视图导航
  15. 学籍管理系统c语言项目作业,C语言实现学生学籍管理系统
  16. BVH with SAH (Bounding Volume Hierarchy with Surface Area Heuristic)
  17. 使用 closest 和 matches 方法来检测元素是否存在某选择器
  18. 窥视Google Chrome OS
  19. mysql 导入tsv文件,MySQL导出TSV格式文件
  20. 1. 学校在线考试系统

热门文章

  1. 状压DP UVA 10817 Headmaster's Headache
  2. mysql初始化主机名无法解析
  3. 双线路接入时IPSec数据不通问题
  4. Android 编码规范:(七)避免使用终结方法
  5. 2018-2019-1 20189218《Linux内核原理与分析》第九周作业
  6. Linux防火墙-netfilter filter表案列与nat表应用
  7. DHCP服务器在企业里的各种应用方案
  8. 执行带返回参数的存储过程
  9. 本地项目推送到码云私有仓库
  10. 内存泄漏——内存溢出区别