程序员经典面试题,消息队列怎么用,才能保证万无一失

开发 前端
据不完全统计,工业级别的代码,几乎有三分之二都是在处理异常情况。跟很多面试官聊过,在面试中如何考察一个应试者的思维是否周全,比较好的方法就是考察他是否能够思考周全,想到所有异常情况的处理方案。

 据不完全统计,工业级别的代码,几乎有三分之二都是在处理异常情况。跟很多面试官聊过,在面试中如何考察一个应试者的思维是否周全,比较好的方法就是考察他是否能够思考周全,想到所有异常情况的处理方案。相信大家都使用过消息MQ,他可以很好地进行系统解耦,减低变成的复杂度,又可以进行削峰,增加系统在高并发的稳定性,那么使用MQ有哪些注意事项呢?是不是MQ就是万无一失呢?一条MQ消息从产生到消费,有没有可能失败?在哪些环节可能失败,如何处理?

[[314190]]

消息生产失败

一般来说,从生产者到MQ中间件是通过网络调用的,是网络调用就有可能存在失败。下面这些原因,都有可能造成MQ生产失败,例如网络波动,尽管生产者到MQ服务器之间是内网调用,并不意味着网络调用的成功率就是百分之百,内网调用也会遇到网络波动,造成调用超时或者失败。又如调用的MQ机器瞬间Crash掉,这也是有可能造成调用失败的。面对生产者调用MQ的失败,我们是容易比较容易处理的,我们只要简单地进行重试即可,如果重试2-3次失败,那么非常有可能是出现大问题,这个时候再重试意义不大,需要进行告警,让开发运维介入,进行处理。

MQ处理存储失败

消息到达消息中间件之后,通常是会被存储起来的,只有被写入到磁盘中,消息才是真正地被存储,不会丢失。但是,大部分MQ中间件并不是收到消息就立马写入磁盘的,只是由于磁盘的写入速度相对于内存,现得慢得多得多,所以,像Kafka这样的消息系统,是会把消息写到缓冲区中,异步写入磁盘,如果机器在中途突然断电,是有可能会丢失消息的。为了解决这个问题,大部分的MQ都是采用分布式部署,消息会在多台机器上写入缓存中成功才会返回给业务方成功,由于多台机器同时断电的可能性较低,我们可以认为这是比较低成本又可靠的方案。

消费者处理失败

程序员经典面试题,消息队列怎么用,才能保证万无一失

一般的MQ都有MQ重试机制,如果处理失败,就会尝试重复消费这个MQ。这个带来的问题就是,MQ可能已经成功消费了,但是在通知MQ中间件的时候失败了,这个时候带来的结果就是消息重复消费。同理,在生产者重试的时候,也会遇到消息重复消费的问题。这个时候,就要求我们尽量把接口设计得有幂等性,这个时候即便是重复消费,也不用担心什么问题了。基本上做好这三点,我们就能够大大地提高我们地系统地可用性了!如果你有兴趣,欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。

 

责任编辑:华轩 来源: 今日头条
相关推荐

2020-10-11 20:41:14

消息队列数据技术

2021-01-11 18:36:06

Redis分布式锁数据库

2013-02-01 10:48:52

2021-06-22 06:13:05

私有云混合多云网络架构

2013-01-06 10:57:03

2011-07-19 21:20:01

2013-08-12 10:37:14

云服务云计算

2017-10-26 14:15:32

测试工具设计开发

2020-02-06 08:58:09

程序员技术数据库

2016-11-28 15:54:17

联想网盘

2019-06-25 08:46:04

Redis分布式锁JVM

2022-02-07 19:28:02

LoRa广域网5G

2020-04-08 10:18:56

MySQL数据库SQL

2019-09-20 14:25:21

程序员Google人生第一份工作

2020-03-02 17:00:24

程序员数据库MySQL

2012-05-25 10:15:06

Java程序员面试题

2020-04-26 09:48:11

MySQL数据库架构

2021-04-28 18:26:35

命令参数git

2021-08-31 15:57:32

勒索软件零信任网络罪犯

2020-05-06 15:02:58

MySQL数据库技术
点赞
收藏

51CTO技术栈公众号