前言
我们之前通过RestTemplate访问其它微服务时,虽然能够实现轻量级的微服务之间通讯,但写着写着发现很多的Url难以管理,代码可读性很差,开发维护也不是很友好。所以一种声明式的客户端Feign呼之欲出。
Feign
1.引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.添加接口
@FeignClient(name = "user-center")
public interface UserCenterFeignClient {
/**
* http://user-center/users/{id}
* @param id 用户 id
* @return
*/
@GetMapping("/users/{id}")
UserDTO findById(@PathVariable Integer id);
}
3.开启访问
///UserDTO forObject = restTemplate.getForObject("http://user-center/user/{id}", UserDTO.class, share.getUserId());
///简化 可读 url管理
UserDTO userDto = userCenterFeignClient.findById(share.getUserId());
Feign细粒化配置
1.代码方式设置日志级别
/**
* feign 配置类
* 这个类别加@Configuration注解 否则父子上下文重叠
*/
import feign.Logger;
import org.springframework.context.annotation.Bean;
public class GlobalFeignConfiguration {
@Bean
public Logger.Level level() {
return Logger.Level.FULL;
}
}
接口添加注解
@FeignClient(name = "user-center",configuration = GlobalFeignConfiguration.class)
2.属性配置日志级别
logging:
level:
com.**.api.service.IFeignService: DEBUG
Feign性能优化
目前默认Feign通过urlConnection来构建http请求,每次构建严重影响性能,可以通过以下几种方式来优化
- 添加http连接池,可提升20%左右
- 简化日志级别
1.引入依赖
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>9.4.0</version>
</dependency>
2.配置
feign.httpclient.enabled=true