okhttp连接池_采用 Http 连接池,提升 Feign 的并发吞吐量 0130

4ad4db8278110e77db5d5ef022ebc0e4.png

采用 Http 连接池,提升 Feign 的并发吞吐量

为什么 http 连接池能提升性能?

http 的背景原理

a. 两台服务器建立 http 连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并

且也很耗时间。

b. Http 连接需要的 3 次握手 4 次分手开销很大,这一开销对于大量的比较小的 http 消

息来说更大。

优化解决方案

a. 如果我们直接采用 http 连接池,节约了大量的 3 次握手 4 次分手;这样能大大提升吞

吐率。

b. feign 的 http 客户端支持 3 种框架;HttpURLConnection、httpclient、okhttp;默认是

HttpURLConnection。

c. 传统的 HttpURLConnection 是 JDK 自带的,并不支持连接池,如果要实现连接池的

机制,还需要自己来管理连接对象。对于网络请求这种底层相对复杂的操作,如果有可用的

其他方案,也没有必要自己去管理连接对象。

d. HttpClient 相比传统 JDK 自带的 HttpURLConnection,它封装了访问 http 的请求头,

参数,内容体,响应等等;它不仅使客户端发送 HTTP 请求变得容易,而且也方便了开发人

员测试接口(基于 Http 协议的),即提高了开发的效率,也方便提高代码的健壮性;另外

高并发大量的请求网络的时候,还是用“连接池”提升吞吐量。

将 Feign 的 Http 客户端工具修改为 HttpClient

创建项目

修改 pom 文件添加 HttpClient 的坐标

<!-- 使用Apache HttpClient替换Feign原生httpURLConnection -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>com.netflix.feign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>8.17.0</version>
</dependency>

修改配置文件开启 HttpClient 的使用

#启用 httpclient
feign.httpclient.enabled=true
注意:如果使用 HttpClient 作为 Feign 的客户端工具。那么在定义接口上的注解是需要
注意,如果传递的是一个自定义的对象(对象会使用 json 格式来专递)。需要制定类型。

Product-Service

/**
* Product 服务接口
* @author Administrator
*
*/
@RequestMapping("/product")
public interface ProductService {
//查询所有商品
@RequestMapping(value="/findAll",method=RequestMethod.GE
T)
public List<Product> findAll();
//根据商品 ID 查询商品
@RequestMapping(value="/getProductById",method=RequestMe
thod.GET)
public Product getProductById(@RequestParam("id") Integer 
id);
//添加商品传递多个参数 方式一 :GET 方式
@RequestMapping(value="/add",method=RequestMethod.GET)
public Product addProduct(@RequestParam("id") Integer 
id,@RequestParam("name") String name);
//----------------------Httpclient----------------------
------------------------
//添加商品传递多个参数 方式二 :POST 方式
@RequestMapping(value="/add2",method=RequestMethod.POST,
consumes=MediaType.APPLICATION_JSON_VALUE)
public Product addProduct2(@RequestBody Product product);
//使用 HttpClient 工具 添加商品传递多个参数 :基于 GET 方式
@RequestMapping(value="/add3",method=RequestMethod.GET,c
onsumes=MediaType.APPLICATION_JSON_VALUE)
public Product addProduct3(Product product);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值