00:00
欢迎大家继续观看上硅谷格ID技术视频,这节课我们继续给大家讲解基于ID构建工具的微服务实战。首先我们要创建微服务所操作的数据库和表。咱们这里创建了一个micro user库,创建了一个micro order库,然后在这两个库底下分别又创建了一个user表和一个order info表。来这个库和表结构,咱们给大家看一下。比如说,我们在user库底下创建了一个user表,这个user表里边有用户的ID、用户的名字、用户的邮箱、用户的性别。啊,这四个字段,而在order库底下,咱们这里有一个order in表,在order in发表里边有。订单的ID、订单所属用户的ID以及订单相关的产品信息。大家仔细观察会发现,咱们这里有四个订单,这四个订单是分别属于啊一号用户和二号用户的,也就是说三号用户和四号用户,他实际上是没有订单信息的。啊,一会儿咱们在微服务里边做查询的时候,就查询当前用户,以及当前用户底下的订单信息啊,做一个一起查出来。
01:09
OK啊,这是微服务操作的数据库和表,接着咱们看一下,咱们项目搭建好之后,它的项目架构就是这样的。首先有一个负工程,由负工程统一管理各个子模块的加包版本信息,它不做实际依赖。然后具体的依赖,然后有啊,各个模块自己啊进行引入啊,当然如果是各个模块都需要的,比如说do内的,那咱们在负控这里做一个统一的设置也是可以的。接着我们看这个B模块,B模块它里边封装的是表对应的PUU类。然后是这个comment模块,Comment模块里边封装的是那些通用的工具类,以及全局统一啊,异常处理类,以及啊全局的统一返回结果,以及日志文件或者日志信息啊,还有一些枚举类。
02:03
然后接着是micro service这个模块,这个模块底下每一个子模块都对应一个微服务,而且微服务之间还可以进行远程调用。接着是这个micro service gateway这个模块。这个模块里边封装的是网关信息。啊,当然在咱们这里并没有给大家。整这个网关啊,相信大家如果会写前面的,相信网关写起来也不是问题。OK啊行,那接下来咱们就带着大家看一下咱们这里具体的代码。由于这个工程。啊,如果是手敲一点点敲出来的话,它比较耗时,所以啊,咱们这里带着大家看一下这个项目结构。然后把这个代码给大家过一遍。相信大家有spring或者spring cloud基础之后,学这个应该都是比较简单的。来,首先我们看负工程底下,它有一个B模块,Common模块,Getway,还有service,就是咱们图给大家画的这个。
03:04
然后咱们首先看这个B模块。B模块里边封装的是表对应的PU类。比如。封装的是这个。User表或和order info表对应的PUU类没有问题。这是B模块,接着是com模块,Com模块里边封装的是哪些啊?公用的工具类信息啊,比如说MD5啊,GT help等等,还有统一的返回结果对象啊,然后这里还有对应的枚举类是吧,以及全局的统一配置啊,比如说这个分页信息或者swa信息。OK。还有全局的异常处理。啊,比如说全局的异常,我们可以在这定义出来,以及全全局的异常处理类。OK啊。这是康美模块。然后接着是service模块,在service模块底下又有啊。
04:00
两个子模块,每个子模块都对应这样一个微服。首先我们看这个service order这个维护。咱们都知道编写一个微服务就那么几步,第一步就是创建这个工程导依赖。啊,第二步就是编写它对应的application,点压码文件,在压码文件里边配置数据库连接信息。啊,以及当前为服务注册到ni注册中心之后,他在ni注册中心的应用名。以及这个当前为服务启动多少号是啥?OK啊,然后还有nis的连接信息,My plus的日志输出信息等等。接着就是编写主启动类。啊,这是咱们编写的主启动类。然后编写完主启动类之后,接着我们编写业务逻辑类,业务逻辑类啊,就操作对应的库就可以了,比如说service order,它操作就是。Micro的优酷。
05:02
然后对这个库操作的时候,还是按照软件的三层架构,比如说CTRL2层,四尾层,还有啊持久化层。OK啊,然后再吃有花草。咱们是通过一条基于注解的circle语句。把当前用户底下所有的商品信息查出来都,然后封装到一个order info列表里边,返回,返回给service层。然后service层拿到数据之后,把这个返回的结果返回给啊CTRL层。然后咱们只需要调CTRL层这个接口,给他传一个用户ID过来,他就能查询当前用户底下所有的商品信息。OK啊,这是这个为辅。接着咱们也给大家看一下。Service user这个为服务。然后在这个为服务里边也是那几步,第一步还是编写页码文件。在压面文件里边配置数据库连接信息,Nes连接信息,以及注册到nis之后在注册中心的应用名啊,还有当前微服务启动账号。
06:07
你会发现service user启动账号是77774个七,而service order咱们刚才配置的是778是吧,三个七一个吧。OK。第一步配置页面文件,第二步就是编写主启动类。主启动类跟刚才service order几乎是一样的,只不过在这里多了一个enable class注解。啊,因为咱们这里要涉及到远程调用,从service user这个为服务,要远程调用啊,Service order这个为服务。而且使用这个注解的时候,一定要指定它对应的这个Y6值。OK啊。行。这是主启动类,第三步就是编写业务逻辑类。业务逻辑类比如说咱们service user要操作的user表对应的这个CTRL层、service层以及持久化层。
07:00
OK,我们先看这句话层。这句话层咱们还是基于朱姐的这样一个搜索语句,然后是根据用户的ID查询当前用户信息。接着我们看service层。在service层,咱们也传一个参数,传一个用户的ID过来,咱们会根据这个用户的ID,然后查询当前用户信息。同时咱们还还会根据这个用户ID查询啊。当前用户底下所有的订单信息,查询订单信息的时候,咱们用的是open费。啊,然后咱们把这个用户ID对应的用户信息,以及当前用户底下所有的订单信息都封装到一个map里边,然后把它返回给CTRL层。然后在CTRL层。啊,在这里做一个接触,以后咱们只要访问。用户微服务user info下边的啊,携带一个ID过来,就能查询当前用户信息,以及当前用户底下所有的订单信息。OK啊,行。这是啊,前面这几个模块。
08:00
这几个模块之后看完了之后啊,接着咱们最重要的看一下这个负工程。他的。这个setting grade文件。这个setting文件里边记录了当前复工程的名字,以及当前复工程底下各个子模块的名称。是吧,比如说有病模块、common模块get service,以及service下边的service user service下边的service order这几个模块。OK啊。相信这个对大家。都没有问题。接着我们再来看一下这个build.grid文件,这个文件是相对来说对大家是比较。难一点。OK啊来,首先在这个build文件里边,咱们这里啊,对当前负工程做了一个描述。啊。就是。做一个说明信息。接着咱们在这里还引入了一个脚本插件。
09:01
就是窝深一点,Grid。就这个。在这个Washington的脚本文件里边,咱们记录的是。啊,咱们整个微服。各个模块所用到的价包版本信息。比如咱们这里封装了fast jacent my beat my circlewagg。GDWT的,或者说GWT的。封装这些版本号信息之后,在这里咱们把它放在这个dependency对应的这个map里边。键随便写值,就是用group加name,然后加这个版本号,这些版本号都是从里边根据这个键取的。啊,而且咱们也是把这些都放在啊。EST这个拓展属性里边。OK啊,行。在这配置之后,然后咱们使用apply from在这里做了个引入,引入之后咱们在哪用到这些版本呢?诶咱们是在。这个负工程,这个build文件通过一个subjects这样一个标签,为所有的当前工程底下的子工程设置一个。
10:09
这个加班版本声明信息啊,声明子工程所用的的加班版本信息的时候。咱们用的是dependence management。做的加班版本的统一管理。啊,而且咱们在这里边用到了一个for循环,咱们每次电力跟工程拓展属性下边的depends。根工程拓展属性其实就是这样,就是这个washing grid文件里边记录的。啊,你在这里引入了washingtonid,就相当于把washingtonid文件中的。这些都已经啊。啊,都已经粘贴在这个build文件里边,所以在这里便利的时候就便利的是当前跟工程底下的EST拓展属性里边了,Depends。这是一个map,遍历这个map的时候,咱们根据。
11:00
啊,一个entry取它的value,这个value其实就是这些具体的。这些价班的版本信息啊,或者说加班的依赖信息。拿到它之后,咱们在这里做了一个声明,声明之后以后咱们再需要这些。像my circleq的swa他们的依赖信息的时候,咱们就在这里啊,直接在各个子模块直接引入就可以了,而且引入的时候不需要再指定版本号了,因为这些my circle呀,发suggest啊等等,它具体的版本号都是啊负工程。啊,在这里进行统一维护的。啊,当然后边如果大家还需要加其他的。依赖包,你也可以把版本号写在这里,然后把这些依赖写在这里。啊,然后在以后在引入的时候,你就直接写他的group和name就可以了,不用写。内后边的版本号信息了。OK啊。这是。引入的washid这个脚本文件,接着咱们在这里还声明了spring cloud的版本号,Spring cloud的版本号咱们也也是。
12:07
在这个EST属性里边定义的,比如说spring cloud版本号是这个H版的啊,包括对应的spring的版本号,以及spring cloud阿里巴巴的版本号,然后spring cloud和spring cloud阿里巴巴。这个版本号它是声明在这个拓展属性里边的,所以在下边儿咱们在这里做了一个引用。啊,引用了spring spring cloud的版本号,Spring cloud阿里巴巴的版本号。OK啊,注意这个imports是放在dependency management标签定的,所以它也是spring cloud的版本的一个声明,它不做十类。然后在哪里做实际进呢,就是在后边咱们再导啊,在各个模块导具体spring cloud的版本信息的时候,咱们就不需要指定每个加班对应的版本号啊,我们只需要指定这个价包所对应的group和name就可以了。
13:05
OK啊,这样咱们spring cloud的版本号也是由负工程来控制的。啊,包括一些常用的加包,也是有复工程,那springbo呢,诶springbo。注意啊,这个spring cloud版本号,它一定要和management这个插件一起使用。OK。至于spring的版本号,咱们实际上是。在这里做了一个声明,然后在哪引用了呢?来在下边这里引用了。是不是啊,OK啊,咱们使用的是spring boot c plug这个插件来管理spring BOO的版本号信息。啊,有了它之后,咱们就可以在下边使用。这个T的这个插件了。是吧,就在这里就不需要指定这些版本号信息了。OK啊,行回来。然后这个。
14:00
仓库和这个依赖信息实际上都是给这个插件准备的,这个咱们前面给大家讲过啊,所以这些也过。然后接着咱们对所有的product啊,做了一个统一的事儿,比如说他们的group,以及。还有啊,JDK版本信息还有啊,统一的编码解码的问题,还有啊,各个模块都需要用到的,比如说g unit是吧,以及这个对应的这个支持的g unit5还是UNIT4啊。还有就是各个模块所用的仓库,咱们在这里也做了一个统一的事儿。OK啊,需要注意的是,咱们从all products里边,这里设置的这个依赖是指的。统一的公用的一些依赖,就是各个模块都会用到的。啊OK啊行,这里才是做真正的实际依赖。OK啊。继续,接着咱们又用了一个sub product sub products只是为当前负工程底下的根呃子工程师。
15:04
啊,比如说。咱们也在各个工程里边都使用一个Java插件,Java library插件,注意啊,Java library插件咱们前面给大家提过,它里边有一个API。这个依赖的管理。OK啊,接着咱们又用到这个,这个实际上就是做了一个版本的声明。啊。接下来咱们就为各个具体的模块做了一个。具体的。啊价包的依赖信息O以及它的说明信息。比如说这个B模块,它实际上就是啊。这个微服实战的病层,用来存放实体类的啊,然后还有这个common模块。然后靠面模块里边它是干啥的,这里也做了一个说明,然后在靠模块里边有一些工具类,它会用到一些加包,或者说各个微服。啊,所通用的一些。
16:00
啊,包括网外各个其他各个模块所共拥有的一些价包,咱们也可以把它放在common模块。而且在靠模块做实际依赖的时候,咱们呀并没有指定具体的版本号,就是因为啊付工程已经帮我们。管理了。对应的版本号信息。OK啊。然后咱们在comment模块引入了my circle fast jacent my pluswagg g wt的啊,以及spring cloud。是吧,在这里做了一个统一引入之后,以后在各个微服务里边。啊,咱们需要使用spring cloud这些依赖包的时候,咱们只需要在各个微服务中。让他依赖。这个B模块依赖com模块就可以了,依赖了B模块它就可以使用B模块里边提供的PU类了,而依赖了com模块呢,就可以使用啊。康模块中提供的那些工具类。啊,或者说全局异常处理类。日志、文件等等信息。
17:02
OK啊行,这是B模块,这是com模块,接着咱们又设置了service模块,由于service模块。啊,它不需需要真正起一个微服,咱们写微服务的时候是在service模块下,它子模块写的,所以在service模块。咱们这里只对它做了一个简单的说明啊,并没有让他做实际依赖。然后。在这里给service模块引入了一个插件。啊,然后接着咱们为service模块的子工程。就是service order和service user啊,分别对这两个子功能做了一个统一的。啊,依赖设置,我看需要注意的是这个依赖设置,咱们不能把它放在。Micro service。这个微服务模块。因为在grid中啊,负工程的依赖子工程是继承不过去的。
18:00
所以啊,咱们并没有给。这个micro service-service这个模块设置依赖,而是给啊各个子工程设置的具体的依赖。啊,咱们是给子模块下的各个子工程设置的具体的依赖。比如说咱们写微服务的时候,咱们也肯定每个微服务都需要依赖这个bin这个模块。OK啊,也需要依赖这个com模块,诶咱们使用的这种方式,而且咱们这里一直用的是a papi,它可以进行依赖的传递。啊。OK啊,行,接着在这个每个service模块,咱们这里还依赖了一个start web,它支持我们写control层,Service层。这就是啊。负工程的build grade文件。这样整好了之后,咱们也就可以运行这两个微服务了。咱们这里有一个。订单为服务,还有一个用户为服务,一会儿我访问用户为服务的时候。来,我们来看一下。
19:01
访问这个用户为服务的时候,在用户为服务的。CTRLL层是吧,咱们访问这个接口,然后它会调service层,在三层这里它使用open份。啊,是制定了一个份可兰的接口,然后在这里调用了订单位服务。你看。说在这里调用的订单未服务。OK啊行,这样他们就能把。当前用户信息,以及当前用户底下所有的订单信息都查出来,查出来之后封装到一个map里边,然后返回给啊。抗层。OK啊,行。这这个啊,这这个这样咱们就把这个微服务运行一下,给大家看一下,这样咱们先启动Nico注册中心啊,然后让这两个微服务注册到ni口注册中心。OK啊,我这个耐注册中心已经启动了,所以我就不用再起了,来我们给大家看一下。
20:07
Nes注册中心默认占用账号是8848。然后这里是nicos。默认的用户名和密码都是nes,此时这里还没有任何微服务。咱们现在启动两个微服。启动service order和service user这两个为服务,那么他注册到注册中心。来。这是负工程,负工程底下的各个模块,咱们应该是找每个微浮。是吧?找到service order和service user这两个微服。这两个微服由于咱们在。这里。为service order是吧,和service user都设置了一个threebo这个插件,所以它这里有了一个。对应的执行指令。比如说有波特乱,下边这个也有一个波乱。
21:01
OK啊,这样咱们先启动service order这个微服务来。诶,这里有一点问题,我们来看一下。来这里提示的是在oper里边没有这两个,对这两个一般是设置在咱们的这个。Build这文件里边啊,在这里边它没有这两个方法,没有咱们就把它剪切,直接放在外边,或者说你可以把它放在咱们这个所有的子工程这里,放在这里就可以了。啊,它这里边儿是有的,这时我们再来。当然这里还有一点问题。就是咱们在。这里设置的这个。是吧,这个unit我们也可以啊,不在这里设置。OK啊,咱们直接把它剪切到这个sub中就可以了。啊,你看all product中不允许,实际上all product中设置不设置也无所谓,因为负工程也不需要,所以啊,咱们就把它剪切到这个子工程这里,在子工程这里设置也是可以的。
22:12
是吧?就为当前负工程底下所有的子工程设置unit,以及让它支持UNIT5。OK啊,此时我们再来启动。这样咱们就把service order这个微服务启动了,启动这个微服务之后,接着咱们把service user这个微服务也给大家启动来启动。我们稍等一下。等着它启动。咱们service user刚才给大家看过,它占用的是。四个七端口号,而service order呢,占用的是三个七,一个八对应的端口号,我看。来,咱们也可以从日志这里看一下。
23:03
你会发现service user确实占用的是四个七段号项面位空。而order呢,它这样的话应该是。77778啊,香名也是工啊,那接下来咱们就访问一下用户服务。访问用户为服务的时候,用户为服务会远程调用啊order为服务。来,我们看一下。然后咱们应该是访问用户为服务下的这个接口。U在上边的音,然后携带一个用户ID,这个用户ID我们携带一或者二都可以。因为既可以查询这个用户信息,也能查询这个用户底下所有的订单信息。啊,无论是写在一还是二,他都会返回啊。当前用户以及当前用户底下的两个订单信息。我们来看。用http local host,然后这里四个七。
24:02
User下边的info携带一个用户的ID走起。OK啊,没有问题,这里能在这里返回啊,这个用户信息,以及当前用户底下所有的订单信息,而且咱们把这个map都已经封装的这个二对项里边。是吧,然后把二对项转换成真数据返回给前端了。这个二类项实际上就是在咱们这个公共模块里边提供的。OK啊,在这里。啊。行。这是咱们基于grid构建工具的微服务时代。
我来说两句