Feign
是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。
Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。
1)引入Feign的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2)给主函数加注解
@EnableFeignClients
@SpringCloudApplication
public class ConsumerApplication {
// @Bean
// @LoadBalanced //底层用了拦截器,拦截restTemplate 的http请求,使用负载均衡算法处理请求
// public RestTemplate restTemplate() {
// return new RestTemplate();
//}
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class);
}
3)编写一个接口,利用SpringMVC的方式,告诉Feign请求的方式,参数,返回值,方法名。
@FeignClient("user-service")
public interface UserClient {
@GetMapping("user/{id}")
User queryById(@PathVariable("id") Integer id);
}
4)Controller类
@Autowired
private UserClient userClient;
@GetMapping("{id}")
public User queryById(@PathVariable("id")Integer id){
// String url="http://user-service/user/"+id;
// String user=restTemplate.getForObject(url,String.class);
return userClient.queryById(id);
OK!
ⅡFeign中使用熔断
Feign对Hystix支持。
1)开启熔断
feign: #hystrix在feign里默认是关闭的,需要开启feign的熔断
hystrix:
enabled: true
2)定义一个类实现client接口
public class UserClientFallback implements UserClient {//熔断接口实现类
@Override
public User queryById(Integer id) {
User user = new User();
user.setUsername("未知");
return user;
}
}
在接口中,指定实现类
@FeignClient(value = "user-service",fallback = UserClientFallback.class)
public interface UserClient {
@GetMapping("user/{id}")
User queryById(@PathVariable("id") Integer id);
}