一、开启GZIP压缩
server: compression: enabled: true mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml feign: compression: request: enabled: true mime-types: ${server.compression.mime-types} min-request-size: 2048 response: enabled: true
二、替换成HTTP连接池
当使用HttpClient技术作为Feign的底层HTTP技术应用时,使用GET请求方式请求头传递自定义类型对象是可行的,只要在服务标准对象中定义的方法参数上增加注解@RequestBody即可处理。
- 添加jar包
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> </dependency>
- 在application.yml文件中添加配置
feign:
httpclient:
enabled: true
三、Feign请求超时配置
请求超时/请求时间: 客户端发起请求,服务端响应并成功建立双向链接的时间。
链接超时/链接时间: 双向链接建立成功后,需要多久必须得到服务端的响应结果。
在Feign声明式远程调用中,负载均衡还是使用的Ribbon技术。
而Ribbon技术默认的链接超时是1秒,也就是1秒内Application Service没有处理Application Client的请求,且链接请求处理后,1秒之内没有返回响应,Application Client都会抛出超时异常。在商业项目中,部分服务是很难在1秒之内处理链接,并在处理链接后1秒之内返回响应的,所以配置超时信息就很有必要了。
定义超时配置的时候,建议为每个服务定义超时策略。如果有部分服务可以使用同样的超时策略,可以使用全局配置。指定服务配置超时策略,会覆盖全局配置。
超时策略的使用优先级: 指定服务的超时策略 -> 全局配置的超时策略 -> 默认的超时策略。
- 全局服务配置
全局服务配置粒度粗糙。商业项目中不同的服务对响应时长的限制也不同,全局服务配置不推荐应用
ribbon:
ConnectTimeout: 5000
ReadTimeout: 5000
- 部分服务配置
部分服务配置粒度细致,可以为每个具体服务配置不同的超时信息,推荐使用
{服务名称 - Eureka控制台中的Application名称}
ribbon:
ConnectTimeout: 5000
ReadTimeout: 5000