定义和使用Feign客户端
1、引入依赖-feign客户端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>4.0.3</version>
</dependency>
2、在order-service(发送方)的启动类添加注解开启Feign的功能:
@EnableFeignClients
3、编写Feign客户端:例如下方:(在发送方编写下方代码)
@FeignClient("xx") //xx为服务名称,表示向哪个服务放松请求
public interface UserClient(){
@GetMapping("/user/{id}")//请求路径
User findById(@PathVariable("id") Long id);//请求参数id,返回值类型为User
}
自定义Feign配置
Feign运行自定义配置覆盖默认配置,可以修改的配置如下:
配置Feign日志有两种方式:
1、配置文件方式
全局生效:
feign:
client:
config:
default: #这里用default就是全局配置,如果写服务名称,则是针对某个微服务的配置
loggerLevel: FULL #日志级别
2、Java代码方式,需要声明一个Bean
public class FeignClientConfiguration{
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC;#基础日志
}
}
①全局配置:所有客户端有效
@EnableFeignClients(defaultConfiguration=FeignClientConfiguration.class)
②局部配置
FeignClient(value="xx服务名称",configuration=FeignClientConfiguration.class)
Feign的性能优化
Feign底层的客户端实现:
- URLConnection:默认实现,不支持连接池
- Apache HttpClient:支持连接池
- OKHttp:支持连接池
Feign添加HttpClient的支持:
引入依赖:
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
配置连接池:(可以使用压测工具Jmeter测试后来写连接数)
feign:
httpclient:
enabled: true #开启feign对HttpClient的支持
max-connection: 200 #最大连接数
max-connection-per-route: 50 #每个路径的最大连接数