当前位置: 首页 > article >正文

spring RestTemplate使用说明

rest-template是spring对httpclient的逻辑封装,它底层还是基于httpclient,所以一些配置其实跟httpclient是强相关的。

基本配置

rest-template可以不带参数,使用默认配置,也可以指定ClientHttpRequestFactory参数,ClientHttpRequestFactory是一个interface,其具体实现有:

  • HttpComponentsClientHttpRequestFactory,包含一个apache的HttpClient实例
  • OkHttp3ClientHttpRequestFactory,包含一个OkHttpClient的实例

以HttpComponentsClientHttpRequestFactory为例,它接受一个apache的HttpClient实例,我们可以定制其配置,样例代码如下:

return HttpClients.custom()
            .setMaxConnTotal(10000)  // 连接池的最大连接数
            .evictIdleConnections(10, TimeUnit.MINUTES) // 连接池内的连接空闲超出该时间即销毁
            .setMaxConnPerRoute(2000)  //单域名允许的最大连接数
            .setDefaultRequestConfig(buildRequestConfig()) // 连接配置见下
            .setRetryHandler(new DefaultHttpRequestRetryHandler(2, true)) //失败后重试次数;重试时是否需要重新发送请求
            .build();

RequestConfig属于基本的连接配置,如下:

return RequestConfig.custom()
            .setConnectTimeout(5) // TCP连接超时
            .setConnectionRequestTimeout(60) //从连接池获取连接的超时
            .setSocketTimeout(60) // 请求等待超时
            .build();

顺带说一下一个TCP连接耗费的内存数(参考这里),使用

sysctl -A | grep net | grep mem

命令可以查看一个TCP连接的读写缓存默认大小,在我的ubuntu上大约200~300K,注意只是默认大小,随着连接数增大,读写缓存大小是会降低的。像上面的例子,若10000个连接都是忙碌的,内存应该会达到G级别(实际则不会,总有部分连接是空闲的)。

安全配置

httpclient需指定SSLContext,所谓SSLContext,就是对接的SSL协议,像SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2、TLSv1.3等,它规定了握手和数据加密传输的一套安全算法,最新最安全的是TLSv1.3,当前多数浏览器和服务器都支持了,不过TLSv1.2还在广泛使用。

生成一个最简单的SSLContext的代码样例:

X509TrustManager x509TrustManager = new X509TrustManagerImpl();
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, new X509TrustManager[] {x509TrustManager}, randomInstance);
return sslContext;

这里,X509TrustManagerImpl可以是一个空实现,不对client和server证书做任何校验。


http://www.kler.cn/a/442655.html

相关文章:

  • 系统架构设计师-第1章-计算机系统知识要点
  • VUE3 VITE项目在 npm 中,关于 Vue 的常用命令有一些基础命令
  • vscode 扩展Cline、Continue的差别?
  • 查看APK的公钥,MD5信息
  • 【Unity高级】一文了解Unity 中的条件编译(附所有指令)
  • 数据存储与信息技术领域 - 磁带技术:企业用磁带与音乐磁带
  • c语言中的信号处理:学习<signal.h>
  • 鸿蒙元服务项目实战:备忘录UI页面开发
  • 获取github容器注册表
  • 统计字符的个数C++
  • 正则表达式在线校验(RegExp) - 加菲工具
  • 微软商店错误提示的全方位解决方案
  • Vue项目的iconfont引入
  • Go语言开发入门与实战
  • 【踩坑】pip离线+在线在虚拟环境中安装指定版本cudnn攻略
  • java二分查找算法详解
  • wireshark功能块
  • 一分钟上手:如何创建你的第一个 Spring Boot Starter
  • Python:利用蒙特卡洛方法求解圆周率
  • CSS系列(21)-- Houdini 详解
  • 【Figma_01】Figma软件初始与使用
  • C++【默认成员函数(下)】
  • C++STL之list(用法超详解)
  • 一款可以替代Navicat的数据库管理工具
  • java: 无效的目标发行版: 9或警告: 源发行版 9 需要目标发行版 9
  • android liveData更新UI数据