前言,RestTemplate用来请求其他服务的方式无法设置连接池。每次发起请求时都必须经过三次握手连接,在高并发场景时,会造成极大的性能浪费,这里通过feign配合apache的httpclient来实现性能优化。不仅性能更好,在代码编写中,直接采用调方法的编写模式,无需再些url地址。更加符合spring的编写规范。
这里采用单独将feign的功能抽取,做成一个微服务的方式,其他服务想要使用可以直接通过maven导入。以降低耦合,提升代码扩展性。
第一步。创建一个springboot服务。
第二步,导入相关依赖:
<!-- Feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
第三步,配置
feign:
client:
config:
default: #全局生效 ,也可以使用(服务名),代表只作用于当前配置服务生效
loggerLevel: BASIC #feign发送请求的日志级别配置。# 日志级别 NONE:默认不打印 BASIC:打印简单信息 HEADERS:打印头信息 FULL:打印全部信息(默认 NONE)
httpclient:
enabled: true
max-connections: 200
connection-timeout: 3000
max-connections-per-route: 40 #每个路径最大连接数
第四步,编写一个interface,feign会自动根据你写的代码构建出http请求。
第五步,再需要使用feign的服务中导入
第六步,在服务启动类上添加
@EnableFeignClients(basePackages = “cn.itcast.demo”) //开启feign的远程调用
第七步,在order中导入你编写的FeignController,即可通过编程方式发送http请求对应的微服务。
OK这样即可完成order对user服务的调用