SpringCloud声明式服务调用Feign

痛定思痛。 2022-01-17 07:35 470阅读 0赞

前言

Feign除了提供Hystrix和Ribbon两者的功能之外,还提供了一种声明式的web服务端定义方式。

依赖

  1. //注意是openfeign
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-openfeign</artifactId>
  5. </dependency>

springcloud Feign是一个工具,它不仅整合了ribbon和hystrix两个强大功能,还提供了一种声明式的web服务端定义方式。查看该依赖包,默认引入了Ribbon和Hystrix,即负载均衡和熔断器的依赖。
Feign提供了可插拔的注解支持,只需给接口添加注解配置,即可完成对服务提供方的接口绑定。

  • 通过在程序启动类上添加@EnableFeignClients注解开启Feign 客户端的功能。
  • 接口上添加@FeignClient注解,来声明一个Feign 客户端,添加@EnableFeignClients注解会自动扫描添加了@FeignClient注解的接口
  • @FeignClient(value=“my-service”,configuration=FeingConfig.class),原有的serviceId属性已废弃,可以用name或value来替代;value为远程调用其他服务的服务名
  • 在Feign中,Client是非常重要的组件,默认情况下,Client是由HttpURLConnection来实现网络请求的,同时Client也支持HttpClient和OkHttp来进行网络请求。

    //在UserServiceFeign接口内部,有个sayHello的方法,该方法通过Feign来调用my-service服务的/demo/hello接口
    @FeignClient(value = “my-service”,configuration = FeignConfig.class, path=”/demo”)
    public interface UserServiceFeign{

    1. @GetMapping(value="/hello")
    2. String sayHello(@RequestParam(value="name")String name);

    }

Feign的客户端负载均衡是通过Ribbon实现的,在定义Feign客户端时,使用了@FeignClient注解,初始化过程中,Feign会根据注解的name或value属性指定的服务名,自动创建一个同名的Ribbon客户端。

HttpClient和OkHttp

工程中改变依赖可以改变网络请求框架:

  1. <dependency>
  2. <groupId>com.netflix.feign</groupId>
  3. <artifactId>feign-httpclient</artifactId>
  4. <version>RELEASE</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.netflix.feign</groupId>
  8. <artifactId>feign-okhttp</artifactId>
  9. <version>RELEASE</version>
  10. </dependency>

Ribbon配置

Feign默认已经对Ribbon客户端负载均衡做了支持。
Feign默认实现了请求的重试机制。

Feign的超时时间是指Ribbon配置的超时时间。需要注意一点,Feign的超时与Hystrix的超时是两个概念,熔断是根据这两个时间设置的最小时间来熔断的。

请求处理的超时时间

  1. ribbon:
  2. ReadTimeout: 10000
  3. ConnectTimeout: 10000

Hystrix配置

默认情况下,Feign会将所有Feign客户端的方法都封装到Hystrix命令中进行服务保护。
设置全局的超时时间,首先需要保证feign.hystrix.enabled=true

  1. feign:
  2. hystrix:
  3. enabled: true
  4. hystrix:
  5. command:
  6. default:
  7. execution:
  8. isolation:
  9. strategy: SEMAPHORE
  10. thread:
  11. timeoutInMilliseconds: 15000

服务降级配置

  • 1、为HelloService实现一个服务降级类HelloServiceFallback
  • 2、在服务绑定接口中,通过@FeignClient注解的fallback属性来指定对应的服务降级实现类

发表评论

表情:
评论列表 (有 0 条评论,470人围观)

还没有评论,来说两句吧...

相关阅读