00:00
好,前面呢,我们搭建好了double的基本环境,接下来呢,我们就来编写一个double的hello word来测试一下double框架的使用。我们先来呢,想象一个场景,假设呢,我们有这么一个需求,哎,我们某一个电商系统里边有一个订单服务模块,诶这是一个外包模块,它呢有一个功能是创建订单,那创建订单的时候呢,他要去用户服务模块来查询用户的地址。而且呢,订单模块跟用户模块都在不同的服务器上,我们要进行远程通信。这种情况呢,就相当于我们这个用户服务,它为我们提供能查询用户收货地址的功能,它是一个服务提供者,而我们这个订单服务,他想要获取到用户的这个收货地址,他是我们服务消费者,也就说要用我们的功能,那么就来创建这两个项目。我们打开eclipse,我先来创建第一个项目,哎,我们以工程的方式来创建第一个。
01:04
Com硅谷,比如我们这个商城叫ma。然后呢,我们来先来创建第一个叫user service,哎用户的服务,它呢是作为服务提供者,哎,我就写上provider。好,我来创建出来,它呢,主要能帮我们来查询用户的收货地址,好那么用户收货地址这些扎B呢,我呢已经给大家放在了这个课件里边,我们把这个功能代码呢,直接复制过来,我们就。不一个一个写着并了,好,我们来创建一个包。创建一个com点按硅谷来创建个这个包,然后呢,把我们这个复制栏,复制栏呢,这有一个嘉宾,我们看到这是用户的收货地址,有一些用户信息,用户地址,用户ID,收货人电话号码是否默认等等。这呢还有一个接口,这个接口呢,是用户服务接口。
02:00
这个用户。这个接口呢,主要给我们提供一个功能,就是按照这个用户ID返回他所有的收货地址。来注释一下。按照用户ID。返回,嗯,所有的收货地址。好,那对于这个接口的实现呢,在这儿有一个,诶按照用户ID返回收货地址,然后呢,我们是传入用户ID,我呢给你返回用户ID的收货地址,这个呢,我们就不去连接数据库,不写那么复杂了,就做一个简单的,我这儿呢直接创建了两个地址,都是属于一号用户的,然后呢把这两个地址呢给我们。整成一个list返回就行,这是我们说的服务提供者,那接下来呢,我们就再来写一个服务消费者,也就是我们说的这个订单服务,他呢负责调用我们用户服务的功能。好,我们来创建一个新的工程。
03:02
这是我们的订单服务,哎,Group ID com,点谷点gmail,还是我们这个。商城的好,我们就叫all service,它呢是一个consumer。但是呢,我们以前的需求说这个订单服务可能需要一个外包模块,我们就不创建一个外包模块了,Hello word呢,暂时就还是以炸包的方式来演示。好,我点一个finish,这我们订单服务,那么它里边呢,我们假设呢,就有一个功能,我先来创建一个接口,这个呢就是订单服务相关的功能,好我呢写在包com,点硅谷,点gmail。Their service。好,假设这个订单接口呢,有一个功能就是初始化订单,我们就写一个空方法先啊初始化订单。根据用户ID的用户ID,我们来初始化订单,好,我们这儿呢,有一个功能叫初始化。
04:03
订单。那么呢,我们来写一下订单service的实现类。好,我们放在employment包下。我们就叫order service。好,它呢来实现我们这个order service接口。Order service接口,这个要实现接口,我们先把这个方法填这这个方法呢,第一步它是需要来查询。咱们这个定查询用户的收货地址。那么查询用户的收货地址,我们就需要调用户的服务了,有的同学说那这咋调呢?那直接把这个炸包依赖到这个工程里边,那这这样的话,这就不是分布式开发了,那它是我们以前单体应用的模式,那现在呢,有可能这个工程还在别的服务器里边,所以说呢,我们不做依赖,那怎么办呢?我可以先把这个接口我拿来,好,我们假设把订单的这个service接口复制,把这个用户的service接口我复制来。
05:09
这呢有一个用户的service接口,咱把这个JB呢,我们也复制来。我们在这儿给这个gmail,这个包里边呢,我们来创建一个币。这个B包呢,我们把原来的这个扎宾也复制来好,那假设呢,我们这个order service要调user service,我们在order service里边写实现,我们一般呢习惯这么来编程,我们把user service的接口拿来。User service。如果在STEM的情况下,我还可以O,然后呢,我来调用user service get user address list,好把这个用户的信息打印过来,我们就直接在这呢来输出一下。输出一下我们这个list的内容。这种呢,就是我们面向接口的编程方式,但是呢,我们此次调用一定是失败的,因为我们这只是引用了接口,接口的真正实现还在别的工程里边,这是第一个问题,第二个问题呢,大家会看到,哎,我们这个user service啊,有可能不止会被order service这一家引用,可能还在别家很多服务里边都要引用,我们在每一个服务里边把这user service加being都写一遍,太麻烦了,那我们呢,可以把所有的这些接口以及B我们抽取到一个新的工程里边,包括在double的官方文档里边,诶。
06:38
来到这个文档,这个文档里边呢,有一个服务最佳化实践这一块呢,也建议我们将我们后来的接口,模型异常等等均放在呢,我们相同的这些API板都放在一个里边,好,我们就来创建一个新的工程,我们将这些公共的我们放在一起,这个工程呢,我们就叫com.ant硅谷。
07:00
点没。那么假设呢,它就是我们,哎这个gmail商城的所有这个interface,我们这些接口公共信息都在这儿,好我呢就将以前的这几个Java b啊Java b我们来复制过来,包括呢,把这个接口也复制过来。但是这个接口呢,我我们就只复制两个接口,Order service the service好。然后其他工程里边的这些B我们就删掉,包括service接口呢,我们也删掉。这两个工程呢,我们都这么来用B以及service接口我来删掉,而我们这些接口呢,我们是写在了这个公共的gmail interface里边,他们两个都来引入这个gmail interface好来打开。你在这呢,写上dependency。好,来插入我们这个依赖,我们就让这个gmail interface来引入进来。
08:00
啊,这是我们这个user service,它需要这么来引入,哎,这样呢就不报错了,我们user service里边这些实现,那我们这个order service也一样。Dependc,好。引入gmail interface。这些公共的接口以及扎宾都在这里边,好,那么这呢也就没问题了,好这这一块呢,都是一些公共的扎宾接口异常等等,那剩下的呢,每一个服务只写自己的一些实践。但是呢,我们现在就是之前说的order service,想要调user service的这个方法肯定是不行的,因为我们只引用了这个接口,真正的实现在别的工程里边,而且可能在别的服务器里边,我就牵扯呢,调这个方法就需要去远程调用。那我们下一节课呢,就可以使用double,把这两个工程呢,稍微改造一下,我们这个远程调用就是可以通过的。
我来说两句