前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud-Feign[HttpClient连接池]

SpringCloud-Feign[HttpClient连接池]

作者头像
用户4919348
发布2019-06-11 19:32:21
5.1K0
发布2019-06-11 19:32:21
举报
文章被收录于专栏:波波烤鸭

  为什么 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 协议的),即提高了开发的效率,也方便提高代码的健壮性;另外高并发大量的请求网络的时候,还是用“连接池”提升吞吐量。

案例实现

1.添加相关的依赖

  添加httpClient的依赖,同时添加Feign对HttpClient的支持

代码语言:javascript
复制
<!-- 使用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>

2.修改配置文件

  在配置文件中开启feign对httpClient的设置。

代码语言:javascript
复制
#启用 httpclient
feign.httpclient.enabled=true

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

代码语言:javascript
复制
consumes=MediaType.APPLICATION_JSON_VALUE)
代码语言:javascript
复制
/**
* Product 服务接口
* @author Administrator
*
*/
@RequestMapping("/product")
public interface ProductService {

//查询所有商品
@RequestMapping(value="/findAll",method=RequestMethod.GET)
public List<Product> findAll();

//根据商品 ID 查询商品
@RequestMapping(value="/getProductById",method=RequestMethod.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,consumes=MediaType.APPLICATION_JSON_VALUE)
public Product addProduct3(Product product);
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年06月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • http 的背景原理
  • 优化解决方案
  • 案例实现
    • 1.添加相关的依赖
      • 2.修改配置文件
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档