一、概述
Feign 是一个 Java 实现的 Http 客户端,用于简化 Restful 调用。
Feign 跟 OkHttp、HttpClient 这种客户端实现理念不一样。Feign 强调接口的定义,接口中的一个方法对应一个 Http 请求,调用方法即发送一个 Http 请求;OkHttp 或 HttpClient 以过程式的方式发送 Http 请求。Feign 底层发送请求的实现可以跟 OkHttp 或 HttpClient 整合。
要想整合 Feign,首先要了解 Feign 的使用以及执行过程,然后看 Sentinel 如何整合进去。
二、实例
一.POM依赖
<!--SpringCloud ailibaba nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--SpringCloud ailibaba sentinel-datasource-nacos 后续sentinel做持久化用到--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency><!--SpringCloud ailibaba sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
二.配置文件
除了sentinel配置文件,还需要配置feign去开启支持
# 激活sentinel对openfeign的支持
feign:sentinel:enabled: true
三.主启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class CloudalibabaSentinelService8402Application {
public static void main(String[] args) {
SpringApplication.run(CloudalibabaSentinelService8402Application.class, args);}
}
四.接口
//参数value指的是注册在nacos中的服务名称,需要调用的多个实例对象的统一名称,fallback是兜底方法。
@FeignClient(value = "nacos-payment-provider",fallback = UserClientFallback.class)
public interface UserClient {
User getById(@PathVariable Long id);
}
五.兜底类
熔断的兜底类
@Component
public class UserClientFallback implements UserClient {
@Override public User getById(Long id) {
return new User(-1L,"无此用户","无此用户"); }
}
六.Controller
Controller掉哟Feign,然后再通过value中的服务名称去找对应的服务
@RestController
public class UserClientController {
@Resourceprivate UserClient userClient ;@GetMapping("/user/{id}")public User getById(Long id) {
return userClient.getById(id); }
}