Feign简介
相比RestTemplate,Feign是更好更方便的远程访问工具。
一,基本使用
加依赖
<!-- eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- Feign依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
按开关
在入口类上添加注解:
@EnableFeignClients
添加配置
如果没有添加eureka配置的需要添加此配置:
eureka:
instance:
prefer-ip-address: true
ip-address: 127.0.0.1
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka/
代码
//调用方接口定义
//这里的name="house"表示被调用方的服务名称
@FeignClient(name="house", path = "house", fallback = HouseFeignServiceFallback.class)
public interface HouseFeignService {
@GetMapping("/{id}")
public House getHouse(@PathVariable int id);
}
//被调用方代码
@RestController
@RequestMapping("/house")
public class HouseWithReqMappingController {
@GetMapping("/{id}")
public House getHouse(@PathVariable int id) {
System.out.println("======================");
House house = new House();
house.setId(1);
house.setName("房屋with_mapping");
return house;
}
}
两者之间的对应关系如下图中红色标识:
二,负载均衡
负载均衡使用ribbon来实现,所以修改负载均衡和上一节ribbon的修改方法一样。
//注意,需要放在被@Configuration修饰的类中
@Bean
public IRule myRule() {
return new RandomRule();
}
三,Feign的服务降级
Feign也支持服务降级,本质上它就是使用上节课学习的Hystrix来实现的。
修改Feign接口
添加降级类,降级类会在发生异常时接管处理。
@FeignClient(name="house", fallback = HouseFeignServiceFallback.class)
新建降级fallback类
降级类要实现上面定义的接口,并实现降级方法,另外注意在降级类上添加@Service注解,以纳入spring管理
@Service
public class OrderServiceCallback implements OrderServiceFeign{
@Override
public Integer getOrderNumberOfUser(Long id) {
return 22;
}
@Override
public Map postOrderNumberOfUser(Long id) {
Map result = new HashMap();
result.put("number",23);
return result;
}
}
改配置
因为feign也是使用hystrix实现的降级,且默认没有打开降级支持,所以这里需要打开hystrix功能:
feign:
hystrix:
enabled: true
四,打开日志
打开Feign调用日志,方便查找问题。
//注意,需要放在被@Configuration修饰的类中
@Bean
Logger.Level feignLogLevel() {
return Logger.Level.FULL;
}
同时,需要配置yml文件中的日志等级。
logging:
level:
org.example.service: debug
五,常用配置
压缩
客户端
feign:
hystrix:
enabled: true
compression:
response:
enabled: true
request:
enabled: true
min-request-size: 2048 # 超过2M则进行压缩
超时配置
在Feign配置超时时,真正的超时降级受两个地方的配置约束:
feign:
client:
config:
default:
read-timeout: 10000 # feign配置的读超时配置
hystrix:
enabled: true
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 30000 #hystrix配置的超时配置