1、RestTemplate的缺点:
+ 代码的可读性差,编码体验不统一
+参数复杂URL难以维护(当你url改变的时候就需要你去改代码。当userservice下面还有其他路径,还必须重复写前缀)
2、Fegin是一个声明式的http客户端,其作用是优雅的帮我们发起http请求
3、依赖和启动(
@EnableFeignClients //开启feign
)(在高版本的springboot中还需要加入一个负载均衡的依赖,有了这个依赖之后需要把ribbon排除)
<!--feign的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--负载均衡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
4、feign的使用方法
5、feign的自定义配置
feign日志级别的配置:
1、通过配置文件来配置:
feign:
client:
config:
default: #default是全局,所有服务都生效。 如果是某个具体的服务则只有这个服务生效
logger-level: Full
2、通过java代码来配置
将这个添加到启动类的
@EnableFeignClients(defaultConfiguration = DefaultFeignLog.class)全局配置
@FeignClient(name = "user-server",configuration = DefaultFeignLog.class)具体服务的配置
@Bean
public Logger.Level log()
{
return Logger.Level.BASIC;
}
三、feign的性能优化手段:使用HttpClietn代替URLConnection;
<!--httpClient-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
#配置
feign:
httpclient:
enabled: true #开关
max-connections: 200 #最大连接数
max-connections-per-route: 50 #单个路径的最大连接数
四、feign的最佳实践:
1、使用继承。service也需要api,controller也需要相同的api,将这个方法提出来写一个接口供他们两个使用。
缺点:service和controller是紧耦合,并且service也需要写参数中的注解
2、抽取:在controller层面将相应的请求的方法写好,然后打包。在其他的微服务只需要导包,然后调用相应的请求方法。