首先把Feign的依赖加上
上面两个已经是公用的,我们只需要复制下面的两个即可
引入Utils模块。我们之前在common模块引入的,这里复制一下即可
开始实现
由于这里是公共的模块引用,所以可以有film可以有cinema这些模块的对应的包,只要你服务和服务之间需要调用的通过Feign,都可以放在这里面。对外做暴露。第二是所有的服务需要调用的时候 ,只需要引入backend-api的模块即可。
我们的接口是什么样的,feign的接口就可以直接复制。例如这里的根据filmId查询,我们直接复制下面代码
接口里面不需要public 去掉前面的修饰符
这样我们的接口就已经对外暴露了出去。
BaseResponseVO是针对我们每一个服务,大家的服务都一样,这时候你去解析BaseResponseVO可以获取到里面所有的结果,然后拿着这个结果去拼装。这是java典型对象的应用,当然如果你对外暴露的是一个通用的服务,而不是这种个性化的服务,
那么你就可以对外暴露String,暴露他呢。就是告诉别人我们返回的都是一个json的字符串,那这个字符串里面,你们就需要去写接口文档,明确标识出来我的入参是什么,出参是什么,各项参数的含义等等。因为我们这次是一个团队的合作,只有模块和模块的交互,
所以一般来讲,我们这里就是暴露BaseResponseVO
甚至更夸张一点,我们连泛型都写上,这样当你去取结果的时候,你只需要在film里面把结果对应的内容直接执行出来就是我们的目标了。
这是我们原来的解析,就比较low了。解析出来的就是一个JsonObject
然后紧接着去解析里面的内容,我们做了大量的json解析的工作,而这个东西如果变成一个对象,那对于我们来说就会变的简单很多,
那么我们要解析什么对象呢?我们这里我们返回的是DescribeFilmRespVO
复制
复制到我们公共服务的film的vo目录下
这样我们就可以指定返回的类型了。
java里面所有的类都是以为package+类名作为唯一标识的
所以我们以前的调用就不行了,整条的链路都要改。改起来可能会有麻烦些。
删除film门模块下的DescribeFilmRespVO
那么这里就会报错
我们重新引下包
接口内也需要引入
还有我们的实现类
xml内也需要修改:com.mooc.meetingfilm.apis.film.vo.DescribeFilmRespVO
hall服务
创建apis包,专门存对外暴露的接口
创建接口:FilmFeignApi
具体的实现我们就不用再写了,因为在接口这里就已经写完了。@RequestMapping啊,@PathVariable都是可以被继承下来的,
所以这里只需要加一个@FeignClient就可以了,之所以写@FeignClient是因为它打包的时候需要生成它的子目录。没有这个注解,它是生成不了的。
name的值就是film-service 这样我们该写的就都写完了,其他的什么都不需要管,
film服务内,开启Feign的支持
同理我们的hall服务也是需要开启
所以绝大数的配置都是在我们的业务系统里面去写。因为它是jar包引进来的。
下面就来看两个服务之间具体怎么互相调用的实现。