SpringCloud分布式中怎么使用open-feign来相互调用微服务(前提是服务都要注册到注册中心【zookeeper,或者nocas】)

1、引入open-feign

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2、编写一个接口,告诉SpringCloud这个接口需要调用远程服务

  • 该接口是在本服务中编写。
  • @FeignClient(value = "")value需要调用的远程服务的名字。
  • @RequestMapping(value = ""),value远程服务的方法请求路径。
  • 这个接口的意思就是要调用的什么服务的什么方法。
  • 声明接口的每一个方法都是调用哪个远程服务的那个请求
@FeignClient(value = "application.name")
public interface CouponFeignService {
    
    
    @RequestMapping("请求路径")
    // 该名字可以与远程服务不一样
    public R coupons();
}

3、开启远程服务调用

  • @EnableFeignClients开启远程服务调用,basePackages声明接口所在的包(可以不写)
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "")
public class MemberApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(MemberApplication.class, args);
    }

}

4、有两种方法请求远程数据(前提是有配置网关)

  • 让所有请求都发给网关,再由网关转给对应的服务
  • 向上面那样直接发给对服务

5、远程调用服务的过程

     * 1 FeignService.saveXXX(XXXTo)
     *      1 SpringCloud 会将这个对象转为json
     *      2 找到对应的微服务,给相应请求/xx/xxx发送请求
     *      将上一步转的jso放在请求位置,发送请求
     *      3 对方服务受到请求,请求体里面有json数据,
     *      @RequestBody XXXEntity xxx 将请求体的json转为XXXEntity
     * 只要json数据模型是兼容的,双方服务无需使用同一个to

猜你喜欢

转载自blog.csdn.net/JISOOLUO/article/details/105577790
今日推荐