程序员经典面试题,消息队列的作用,你能说出几个?

新闻
今年疫情严峻,希望早日控制住,有不少的朋友都打算年后找份新的工作,正好趁着这个时候好好学习,提升下自己。今天我们来聊一聊消息队列的作用。消息队列,相信大家都不陌生,Kafka、RMQ都是大家常用的队列,也是程序员面试中的一个常见的题目。

 今年疫情严峻,希望早日控制住,有不少的朋友都打算年后找份新的工作,正好趁着这个时候好好学习,提升下自己。今天我们来聊一聊消息队列的作用。消息队列,相信大家都不陌生,Kafka、RMQ都是大家常用的队列,也是程序员面试中的一个常见的题目。

 

 

 

 

 

[[314087]]

 

进行削峰,减少并发

数据在后台各个系统中流转就跟流水线上的工人一样,如果前面的工人干得非常快,那么工作就会不停地堆积,很多零件就堆积着等着下面的工人解决。如果请求一直堆积着得不到处理,用户就只能够一直等待,会有不好的体验,同时,因为任务堆积,总是需要占用内存、连接数等资源,就容易引发服务雪崩。所以,对一些实时性要求不高的请求,我们通常可以采用异步进行削峰。一个常见的例子,在电商系统中,当用户下单并完成支付的时候,我们通常会去通知商家的后台,告诉他们可以发货了。但是不同的商家的技术良莠不齐,有些速度真是跟蜗牛一样,这个时候我们这可以采用异步的方式,使用消息队列,慢慢地进行通知。

 

系统解耦

当我们开始开发一个系统的时候,逻辑总是比较清晰跟简单,随着需求的迭代,我们会发现系统越来越复杂,如果开发的程序员能力不足的话,我们会发现系统会越来越混乱,最后甚至出现一个方法几千行代码的情况,那么对于一个越来越复杂地系统,我们怎么进行系统的解耦呢?

 

程序员经典面试题,消息队列的作用,你能说出几个?

 

在一个电商系统中,当我们完成一次交易的时候,远远没有想象中那么地简单,我们通常需要通知仓库或者通知商家,让他们接受订单,尽快发货。同时,我们可能要通知积分系统,给用户下发一定的交易积分。可能这个用户是通过分销过来购买的,需要通知分销系统,创建分销订单,以便后面的结算。一次简单的交易过后,我们可能要同时数十个系统,像阿里巴巴的天猫淘宝,可能完成一次交易,甚至要通知100个系统。如果我们在我们的交易流程里面,逐个系统逐渐通知,那么必然会带来系统缓慢的问题,所以我们可以使用消息队列,每次交易成功后发布一条消息,让其他系统去订阅这条消息。就可以做到系统的解耦了。

延迟处理

在程序设计中,延迟任务也是常有的事情。例如用户创建一次订单之后,可能没有支付。我们可以在创建订单25分钟之后去提醒用户,告诉他有笔订单未支付,万一用户支付了。岂不是美滋滋。一些消息队列提供了延迟队列功能,例如RabbitMQ,我们可以利用其延迟的特性,非常简单地实现这个功能。当然,我们也可以使用其他方法,例如每一分钟扫描一次数据库等等。欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。

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

2020-02-07 10:14:07

程序员设计人生第一份工作

2020-04-08 10:18:56

MySQL数据库SQL

2012-05-25 10:15:06

Java程序员面试题

2020-04-26 09:48:11

MySQL数据库架构

2020-05-06 15:02:58

MySQL数据库技术

2020-04-12 22:29:50

程序员MySQL数据

2020-03-02 17:00:24

程序员数据库MySQL

2019-10-18 09:40:19

程序员固态硬盘Linux

2020-03-18 09:33:47

数据库程序员数组

2019-09-20 14:25:21

程序员Google人生第一份工作

2020-10-09 14:44:57

程序员开发技术

2023-09-13 08:00:57

云原生Java开发者

2015-05-27 09:45:59

程序员

2014-07-28 14:00:40

linux面试题

2010-04-15 11:54:55

面试

2022-08-30 08:13:30

流程模板定期复盘数据

2021-03-04 09:35:54

thisJavaScript开发

2018-12-03 09:42:32

Java程序员阿里面试

2009-08-02 10:21:39

ASP.NET程序员面ASP.NET

2011-03-29 14:31:41

CC++
点赞
收藏

51CTO技术栈公众号