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

口试官问你什么是动静行列?把这篇甩给他!

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

口试官问你什么是动静行列?把这篇甩给他!

一、什么是动静行列?

动静行列不知道各人看到这个词的时辰,会不会认为它是一个较量高端的技能,横竖我是认为它仿佛是挺牛逼的。

动静行列,一样平常我们会简称它为MQ(Message Queue),嗯,就是很直白的简写。

我们先不管动静(Message)这个词,来看看行列(Queue)。这一看,行列各人应该都认识吧。

行列是一种先辈先出的数据布局。

在Java里边,已经实现了不少的行列了:

那为什么还必要动静行列(MQ)这种中间件呢???

  •  到这里,各人可以先猜猜为什么要用动静行列(MQ)这种中间件,下面会继承增补。

动静行列可以简朴领略为:把要传输的数据放在行列中。

图片来历:https://www.cloudamqp.com/blog/2014-12-03-what-is-message-queuing.html

科普:

  •  把数据放到动静行列叫做出产者
  •  从动静行列里边取数据叫做斲丧者

二、为什么要用动静行列?

为什么要用动静行列,也就是在问:用了动静行列有什么甜头。我们看看以下的场景

2.1 解耦

此刻我有一个体系A,体系A可以发生一个userId

然后,此刻有体系B和体系C都必要这个userId去做相干的操纵

写成伪代码也许是这样的:

  1. public class SystemA {  
  2.     // 体系B和体系C的依靠  
  3.     SystemB systemB = new SystemB();  
  4.     SystemC systemC = new SystemC();  
  5.     // 体系A独占的数据userId  
  6.     private String userId = "Java3y";  
  7.     public void doSomething() {  
  8.         // 体系B和体系C都必要拿着体系A的userId去操纵其他的事  
  9.         systemB.SystemBNeed2do(userId);  
  10.         systemC.SystemCNeed2do(userId);  
  11.     }  

布局图如下:

ok,统统安然无恙渡过了几个天。

某一天,体系B的认真人汇报体系A的认真人,此刻体系B的SystemBNeed2do(String userId)这个接口不再行使了,让体系A别去调它了。

于是,体系A的认真人说"好的,那我就不挪用你了。",于是就把挪用体系B接口的代码给删掉了:

  1. public void doSomething() {  
  2.   // 体系A不再挪用体系B的接口了  
  3.   //systemB.SystemBNeed2do(userId);  
  4.   systemC.SystemCNeed2do(userId);  

又过了几天,体系D的认真人接了个需求,也必要用到体系A的userId,于是就跑去跟体系A的认真人说:"老哥,我要用到你的userId,你调一下我的接口吧"

于是体系A说:"没题目的,这就搞"

然后,体系A的代码如下:

  1. public class SystemA {  
  2.     // 已经不再必要体系B的依靠了  
  3.     // SystemB systemB = new SystemB();  
  4.     // 体系C和体系D的依靠  
  5.     SystemC systemC = new SystemC();  
  6.     SystemD systemD = new SystemD();  
  7.     // 体系A独占的数据  
  8.     private String userId = "Java3y";  
  9.     public void doSomething() {  
  10.         // 已经不再必要体系B的依靠了  
  11.         //systemB.SystemBNeed2do(userId);  
  12.         // 体系C和体系D都必要拿着体系A的userId去操纵其他的事  
  13.         systemC.SystemCNeed2do(userId);  
  14.         systemD.SystemDNeed2do(userId);  
  15.     }  

(编辑:河北网)

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

热点阅读