springcloud学习之feign声明式服务调用
feign是springcloud的一种服务调用机制,感觉与dubbo很相似,feign封装之后不像一次HTTP请求更像是方法之间的调用。
简单使用:
1、导入相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、开启注解
在启动类上增加@EnableFeignClients。
3、编写服务接口,配置相关的服务ID,方法名,请求参数与返回值等(其实像将http请求拆分一样)
@FeignClient(value = "search-service" ,fallback = xxFallBack.class)
public interface xx{
@RequestMapping("{id}")
String xxx(@PathVariable("id") String id);
}
@FeignClient声明该接口为feign的client。value中配置服务的ID,fallback配置熔断执行的方法,@RequestMapping用来指定请求等。
定义一个fallback方法实现该接口。重写方法为熔断调用的方法。
@Component
public class xxFallBack implements xx {
@Override
public String xxx(String id) {
return "哎!我又执行了。";
}
}
4、增加相关配置
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:9999/eureka
feign:
hystrix:
enabled: true
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 10000
ribbon:
ReadTimeout: 1500
ConnectTimeout: 7000
MaxAutoRetries : 0
MaxAutoRetriesNextServer: 0
默认feign中熔断是关闭的,我们将其打开enabled:true并配置熔断请求时长
如果有需要再配置ribbon的请求响应时间和请求连接时间和重连等配置。
注意:熔断时间要大于ribbon的总时长,不然达不到ribbon重试的作用了。在AbstractRibbonCommand的getRibbonTimeout方法中可以看到:
ribbonTimeout = (ribbonReadTimeout + ribbonConnectTimeout) * (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1);
5、使用
在需要调用处注入该接口。直接方法调用执行即可。feign会自动找到对应的服务与ip
还没有评论,来说两句吧...