在Ribbon中会利用其对RestTemplate的请求拦截实现对依赖服务的接口调用,RestTemplate也实现了对HTTP请求的封装,形成了一套模板化的调用方法。 我们通常会针对每个微服务自行封装客户端类来包装这些依赖服务的调用,RestTemplate的封装下都是简单的模板化内容。Feign作了进一步的封装,只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了使用Ribbon自行封装服务调用客户端的开发量。
主类使用**@EnableFeignClients**,定义的被调用接口使用**@FeignClient**(“指定一个服务名”),调用类中使用@Autowired注入上面定义的接口实例,并在方法中直接通过该实例调用方法。
仍然是<client>.ribbon.key=value的格式。@FeignClient在创建Feign客户端的同时,会创建一个Ribbon客户端,名字与注解中的name或value值一样。
若要使用Hystrix,则需确认feign.hystrix.enabled的值不是false。而如果要针对某个依赖服务进行关闭,则可以使用@Scope(“prototype”),首先构建一个配置类,类中使用该注解以及@Bean注解修饰Feign.Builder。然后在一个服务的@FeignClient注解中,通过Configuration参数引入配置。
@Configuration public class DisableHystrixConfiguration{ @Bean @Scope("prototype") public Fign.Builder feignBuilder(){ return Feign.bulider(); } } @FeignClient(name="HELLO-SERVICE",configuration=DisableHystrixConfiguration.class) public interface HelloService{}hystrix.command.<commandKey>作为前缀,<commandKey>默认采用方法名作为标识。
只需为Feign客户端的定义接口编写一个具体的接口实现类,每个重写方法的实现逻辑都可以用来定义相应的服务降级逻辑,@FeignClient的fallback属性指定降级实现类。
请求压缩、日志配置。