一、基于Feign远程调用
1、引入Feign依赖
<!--feign客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、添加注解开启Feign的功能
@EnableFeignClients()
3、声明远程调用
@FeignClient("userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
4、使用FeignClient调用方法
@Autowired
private UserClient userClient;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
}
二、自定义配置
feign.Logger.Level:修改日志级别(NONE、BASIC、HEADERS、FULL)
feign.codec.Decoder:响应结果的解析器(http远程调用的结果做解析)
feign.codec.Encoder:请求参数编码(将请求参数编码,便通过http请求发送)
feign.Contract:支持的注解格式(默认是SpringMVC的注解)
feign.Retryer:失败重试机制(请求失败的重试机制,默认没有,不过会使用Ribbon的重试)
(1)基于配置文件修改日志
feign:
client:
config:
default:
loggerLevel: FULL #设置显示日志
(2)基于java代码配置
public class DefaultFeignConfiguration {
@Bean
public Logger.Level logLevel(){
return Logger.Level.BASIC;
}
}
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class)//Java代码添加日志
三、性能优化
1、使用支持连接池
<!--引入HttpClient依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
feign:
client:
config:
default:
loggerLevel: BASIC #设置显示日志
httpclient:
enabled: true #支持httpclient
max-connections: 200
max-connections-per-route: 50
2、日志级别:使用NONE或BASIC
四、Feign最佳实践
将FeignClient抽取问独立模块,并且把接口有关的POJO、默认的Feign配置都放在这个模块中,提供给所有消费者使用
(1)创建一个module、命名为feign-api,然后引入feign的starter依赖
(2)将代码中编写的UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中
(3)在模块中引入feign-api的依赖
//加载UserClient
@EnableFeignClients(clients = {UserClient.class})