加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

面试官问你什么是消息队列?把这篇甩给他!

发布时间:2019-04-17 07:09:52 所属栏目:建站 来源:Java3y
导读:一、什么是动静行列? 动静行列不知道各人看到这个词的时辰,会不会认为它是一个较量高端的技能,横竖我是认为它仿佛是挺牛逼的。 动静行列,一样平常我们会简称它为MQ(Message Queue),嗯,就是很直白的简写。 我们先不管动静(Message)这个词,来看看行列(Que

时刻飞逝:

  •  又过了几天,体系E的认真人过来了,汇报体系A,必要userId。
  •  又过了几天,体系B的认真人过来了,汇报体系A,照旧从头掉谁人接口吧。
  •  又过了几天,体系F的认真人过来了,汇报体系A,必要userId。
  •  ……

于是体系A的认真人,天天都被这给骚扰着,改来改去,改来改去…….

尚有其它一个题目,挪用体系C的时辰,假如体系C挂了,体系A还得想步伐处理赏罚。假如挪用体系D时,因为收集耽误,哀求超时了,那体系A是反馈fail照旧重试??

最后,体系A的认真人,认为隔一段时刻就改来改去,没意思,于是就跑路了。

然后,公司招来一个大佬,大佬颠末几天认识,上来就说:将体系A的userId写到动静行列中,这样体系A就不消常常窜改了。为什么呢?下面我们来一路看看:

体系A将userId写到动静行列中,体系C和体系D从动静行列中拿数据。这样有什么甜头?

  •  体系A只认真把数据写到行列中,谁想要或不想要这个数据(动静),体系A一点都不体谅。
  •  即便此刻体系D不想要userId这个数据了,体系B又溘然想要userId这个数据了,都跟体系A无关,体系A一点代码都不消改。
  •  体系D拿userId不再颠末体系A,而是从动静行列里边拿。体系D即便挂了可能哀求超时,都跟体系A无关,只跟动静行列有关。

这样一来,体系A与体系B、C、D都解耦了。

2.2 异步

我们再来看看下面这种环境:体系A照旧直接挪用体系B、C、D

代码如下:

  1. public class SystemA {  
  2.     SystemB systemB = new SystemB();  
  3.     SystemC systemC = new SystemC();  
  4.     SystemD systemD = new SystemD();  
  5.     // 体系A独占的数据  
  6.     private String userId ;  
  7.     public void doOrder() {  
  8.         // 下订单  
  9.           userId = this.order();  
  10.         // 假如下单乐成,则布置其他体系做一些事    
  11.         systemB.SystemBNeed2do(userId);  
  12.         systemC.SystemCNeed2do(userId);  
  13.         systemD.SystemDNeed2do(userId);  
  14.     }  

假设体系A运算出userId详细的值必要50ms,挪用体系B的接口必要300ms,挪用体系C的接口必要300ms,挪用体系D的接口必要300ms。那么这次哀求就必要50+300+300+300=950ms

而且我们得知,体系A做的是首要的营业,而体系B、C、D长短首要的营业。好比体系A处理赏罚的是订单下单,而体系B是订单下单乐成了,那发送一条短信汇报详细的用户此订单已乐成,而体系C和体系D也是处理赏罚一些小事罢了。

那么此时,为了进步用户体验和吞吐量,着实可以异步地挪用体系B、C、D的接口。以是,我们可以弄成是这样的:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读