phpok企业建站系统,网站建设公司词,买了域名怎么建网站,工商网企业信息查询远程调用RestTemplate远程调用RestTemplate方式调用存在的问题Http客户端Feign实现步骤自定义配置Feign优化Feign性能优化——连接池配置最佳实践RestTemplate远程调用 Bean
// LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}Autowiredprivat…
远程调用RestTemplate远程调用RestTemplate方式调用存在的问题Http客户端Feign实现步骤自定义配置Feign优化Feign性能优化——连接池配置最佳实践RestTemplate远程调用 Bean
// LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}Autowiredprivate RestTemplate restTemplate;String url http://userservice/user/order.getUserId();User user restTemplate.getForObject(url, User.class);RestTemplate方式调用存在的问题
代码可读性差编程体验不统一参数复杂url难以维护
Http客户端Feign
概念 Feign是一个声明式的Http客户端 作用 优雅的实现Http请求的发送避免RestTemplate存在的问题
实现步骤
引入依赖
!-- Feign客户端--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency在order-service的启动类添加注解开启Feign的功能
EnableFeignClients
MapperScan(cn.itcast.order.mapper)
SpringBootApplication
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
}编写Feign客户端
FeignClient(userservice)
public interface UserClient {GetMapping(/user/{id})User findById(PathVariable(id) Long id);
}主要是基于SpringMVC的注解来声明远程调用的信息 - 服务名称userservice - 请求方式GET - 请求路径/user/{id} - 请求参数Long id - 返回值类型User
使用 Autowiredprivate UserClient userClient;User user userClient.findById(order.getUserId());
自定义配置
1. 方式一 2. 方式二
Feign优化
Feign底层客户端原理
URLConnection默认实现不支持连接池Apache HttpClient支持连接池OKHttp支持连接池
Feign性能优化——连接池配置 方式一Feign添加HttpClient的支持: 引入依赖 !-- HttpClient--dependencygroupIdio.github.openfeign/groupIdartifactIdfeign-httpclient/artifactId/dependency配置连接池 feign:client:config:default: #default 全局配置loggerLevel: BASIC # 日志级别BASIC就是最基本的请求和响应信息httpclient:enabled: true # 开启feign对HttpClient的支持max-connections: 200 #最大连接数max-connections-per-route: 50 #每个路径的最大连接数注意事项 日志级别尽量用BASIC 使用HttpClient或者OKHttp代替URLConnection 引入feign-httpClient依赖配置文件开启httpClient功能设置连接池参数
最佳实践
方式一继承给消费者的FeignClient和提供者的Controller定义统一的父接口作为标准 服务紧耦合父接口参数列表中的映射不会被继承9aa621aee0.png) 方式二抽取将FeignClient抽取为独立模块并把接口有关的POJO、默认的Feign配置都放到这个模块中提供给所有消费者使用 实现方式二
创建一个mould命名为feign-api然后引入feign的starter依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency将order-service中编写到UserClient、User、DefaultFeignConfiguration都复制到feign-api项目中在order-service中引入feign-api的依赖\
!-- 引入feign的统一api--dependencygroupIdcn.itcast.demo/groupIdartifactIdfeign-api/artifactIdversion1.0/version/dependency/dependencies修改order-service中的所有与上述三个组件有关的import部分改成导入feign-api中的包重启测试
报错 当定义的FeignClient不在SpringBootApplication的扫描包范围时这些FeignClient无法使用
解决方式
方式一指定FeignClient所在包
EnableFeignClients(basePackages cn.xxx.xxx.client)方式二指定FeignClient字节码
EnableFeignClients(clients {UserClient.class})