一.微服务提供对外api
1.假设现在有两个微服务,jc-club-subject-dev和jc-club-auth-dev,我们想在subject中调用auth微服务,获取到用户信息,既然想要调用auth微服务,那auth微服务就需要提供对外提供的api,所以在api包里面,创建了一个UserFeignService接口,提供了一个对外的api, 在这里面把我们想要提供的对外接口,从当前微服务中的controller接口中把函数粘贴过来即可。 同时在接口上加入
2.在对应接口加上@FeignClient("当前提供api的微服务名称")注解。
@FeignClien中的有一个@import注解起到了相关作用,在进行扫包的时候,动态代理实现了这个接口,加入到了ioc容器,具体原理可以看看其他文章
3.@EnableFeignClients("com.wgz") 这是启动类需要加的注解,这样才可以扫描到@FeignClient标注过的接口
4.subject想要获得UserFeufnService,还得需要导入这个包,直接包含auth微服务模块肯定是不合理的,建议在auth模块中新建立一个api子模块,
subject微服务通过在pom.xml中引入这个api模块实现引入
此图为auth服务对外提供的api
二.远程调用
rpc也就是远程调用的意思,在subject的中的一个rpc包里,实现一个UserRpc类
注入我们之前在auth微服务中api模块中编写的UserFeignService,在subjec微服务中使用UserFeignService调用函数完成远程调用
三.检测是否获取到信息
四.可能会报错提示你没有spring-cloud-loadbalance,如果提示了加下面的依赖就没有问题了
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-loadbalancer</artifactId> </dependency>
五.微服务调用时,被调用者的上下文打通 ,
openfeign实际上底层还是RestTemplate重写发出一个http请求,所以此时我们还是需要一个feign拦截器,在网关发请求到调用微服务时就拦截请求,将loginid写入到我们新的请求头里面 ,当前微服务发出请求,被调用微服务的才可以从请求头里面拿到loginid,再去实现被调用的微服务上下文打通
如有错误请指正