济南网站建设 选聚搜网络,网站建设要不要监理,长沙公司网站建设,河源建筑设计企业名录黄页在之前我们两服务之间调用的时候用的是restTemplate,但是这个方式调用存在很多的问题 String url http://userservice/user/ order.getUserId();
代码可读性差#xff0c;编码体验不统一参数复杂的url难以维护
所以我们大力推出我们今天的主角--Fegin Feign是…在之前我们两服务之间调用的时候用的是restTemplate,但是这个方式调用存在很多的问题 String url http://userservice/user/ order.getUserId();
代码可读性差编码体验不统一参数复杂的url难以维护
所以我们大力推出我们今天的主角--Fegin Feign是一个声明式的http客户端其作用就是帮助我们优雅的实现http请求的发送解决上面的问题
定义和使用Fegin客户端
1.引入依赖 !--feign客户端依赖--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency
2.在A服务的启动类中添加注解开启Figin的功能
MapperScan(cn.itcast.order.mapper)
SpringBootApplication
EnableFeignClients//Feign的客户端
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
}
3.编写Feign客户端
FeignClient(value userservice)
public interface UserClient {GetMapping(/user/{id})User findById(PathVariable(id) Long id);
}/*
基于SpringMVC的注解来声明远程调用的信息
服务名称userservice
请求方式GET
请求路径/user/{id}
请求参数Long id
返回值类型User
*/
4.使用Fegin客户端代替RestTemplate
Autowiredprivate UserClient userClient;public Order queryOrderById(Long orderId) {// 1.查询订单Order order orderMapper.findById(orderId);// 2.用Feign远程调用User user userClient.findById(order.getUserId());// 3.封装user到Orderorder.setUser(user);// 4.返回return order;}
Fegin的使用步骤
引入依赖添加EnableFeginClient注解编写FeginClient接口使用FeginClient中定义的方法代替RestTemplate
自定义配置来覆盖默认配置可修改为
类型作用说明fegin.Logger.Decoder修改日志级别包含四种不同的级别NONE、BASIC、HEADERS、FULL feign.codec.Decoder 响应结果的解析器 http远程调用的结果做解析例如解析json字符串为java对象 feign.codec.Encoder 请求参数编码 将请求参数编码便于通过http请求发送 feign. Contract 支持的注解格式 默认是SpringMVC的注解 feign. Retryer 失败重试机制 请求失败的重试机制默认是没有不过会使用Ribbon的重试
自定义Fegin的配置
一般配置Fegin日志一般有两种方式
方法一
1.全局生效
feign:client:config: default: #这里default就是全局变量如果是写服务名称则是针对某个微服务的配置loggerLevel: FULL #日志级别
2.局部生效
feign:client:config: userservice: #这里userseervice就是局部变量loggerLevel: FULL #日志级别
方法二java代码方式
public class DefaultFeignConfiguration {Beanpublic Logger.Level logLevel(){return Logger.Level.BASIC;}
}
1.如果是全局配置则将它放到EnableFeginClients这个注解中
EnableFeignClients(clients UserClient.class,defaultConfiguration DefaultFeign
2.如果是局部配置则把它放到FeginClient这个注解中
FeignClient(value userservice,configuration DefaultFeignConfiguration.class)
Fegin性能优化
Fegin的底层的客户端实现
URLConnection:默认实现不支持连接池Apache HttpClient:支持连接池OKHttp:支持连接池
优化Fegin的性能主要包括
使用连接池代替默认的URLConnection日志级别最好用basic或者none
Fegin添加FttpClient的支持
引入依赖 !--引入HttpClient依赖--dependencygroupIdio.github.openfeign/groupIdartifactIdfeign-httpclient/artifactId/dependency
配置连接池
feign:client:config:default: #这里default就是全局变量如果是写服务名称则是针对某个微服务的配置loggerLevel: FULL #日志级别httpclient:enabled: true # 支持HttpClient的开关max-connections: 200 # 最大连接数max-connections-per-route: 50 # 单个路径的最大连接数
Fegin的最佳实践 EnableFeignClients(clients com.ffyc.fegin.clients) 如果按照第二种方法将Fegin客户端独立出去在启动SpringBootAppliaction的扫描包范围时这些Fegin客户端无法使用所以我们需要去解决这个问题
方式一(指定FeginClient所在包)
EnableFeignClients(clients ffyc.com.fegin.clients)
方式二指定FeginClient字节码
EnableFeignClients(clients { UserClient.class})