springcloud学习之feign声明式服务调用

£神魔★判官ぃ 2024-04-18 13:38 147阅读 0赞

feign是springcloud的一种服务调用机制,感觉与dubbo很相似,feign封装之后不像一次HTTP请求更像是方法之间的调用。

简单使用:

1、导入相关依赖

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

2、开启注解

在启动类上增加@EnableFeignClients。

3、编写服务接口,配置相关的服务ID,方法名,请求参数与返回值等(其实像将http请求拆分一样)

  1. @FeignClient(value = "search-service" ,fallback = xxFallBack.class)
  2. public interface xx{
  3. @RequestMapping("{id}")
  4. String xxx(@PathVariable("id") String id);
  5. }

@FeignClient声明该接口为feign的client。value中配置服务的ID,fallback配置熔断执行的方法,@RequestMapping用来指定请求等。

定义一个fallback方法实现该接口。重写方法为熔断调用的方法。

  1. @Component
  2. public class xxFallBack implements xx {
  3. @Override
  4. public String xxx(String id) {
  5. return "哎!我又执行了。";
  6. }
  7. }

4、增加相关配置

  1. eureka:
  2. client:
  3. service-url:
  4. defaultZone: http://127.0.0.1:9999/eureka
  5. feign:
  6. hystrix:
  7. enabled: true
  8. hystrix:
  9. command:
  10. default:
  11. execution:
  12. isolation:
  13. thread:
  14. timeoutInMilliseconds: 10000
  15. ribbon:
  16. ReadTimeout: 1500
  17. ConnectTimeout: 7000
  18. MaxAutoRetries : 0
  19. MaxAutoRetriesNextServer: 0

默认feign中熔断是关闭的,我们将其打开enabled:true并配置熔断请求时长

如果有需要再配置ribbon的请求响应时间和请求连接时间和重连等配置。

注意:熔断时间要大于ribbon的总时长,不然达不到ribbon重试的作用了。在AbstractRibbonCommand的getRibbonTimeout方法中可以看到:

  1. ribbonTimeout = (ribbonReadTimeout + ribbonConnectTimeout) * (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1);

5、使用

在需要调用处注入该接口。直接方法调用执行即可。feign会自动找到对应的服务与ip

发表评论

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

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

相关阅读