web.xml超时时间不生效_HttpClient三个超时时间详解

2023-05-16

最近看线上问题发现异常日志有几种超时时间,有点疑惑各自的含义,于是决定一探究竟。


HttpClient有三种超时时间设置,在RequestConfig配置类中定义的,分别为connectionRequestTimeout、connectTimeout和socketTimeout,如下图,然后分开讲解。

93e554d67a72e432bffb7fd876a76297.png

RequestConfig三种超时时间属性

一、准备实验代码

1、服务端代码

准备一个controller代码,如下:

5b80b2ed263688b87686db198b9c69ce.png

服务端代码

2、客户端代码

准备一个测试类作为客户端,如下:

78132dcbb2349bdf05bff16a97c9a733.png

客户端代码

二、三种超时时间各自验证

1、connectTimeout

字面含义就是连接超时时间,查阅了下资料说是客户端和服务端建立连接即三次握手阶段的超时时间。于是通过调整上面客户端的请求代码进行验证。

将请求端口号调成一个错误的端口,目的是让三次握手不成功,然后执行客户端请求,结果如下:

b33fe577a7c34bb319e279bc716322b7.png

connectTimeout报错

发现报错是connect time out,并且可以通过调整前面客户端代码中的setConnectTimeout(1000)的值去验证超时时间是否生效,我这里进行了验证发现这里的时间调为2000以上时候就不起作用了,好像最大只能2000ms超时似的。

2、socketTimeout

这个查阅了下是在客户端和服务端建立好连接之后,服务端和客户端之间数据包传输的超时时间,而且这个超时时间是单次数据包超时时间,而不是整个数据传输过程的超时时间,同样改下代码进行验证。需要调整下服务端Controller的代码为多次发送数据,并在每次发送后睡眠一会如1000ms,如下:

再改下setSocketTimeout(999),运行客户端代码,结果如下:

可以看到有socket time out报错,接下来我们再将setSocketTimeout(1003)调大一点,观察是否成功,发现调大时间之后,没有报错,可以正常拿到完整的数据,那也就说明了socketTimeout是单个数据包的超时时间,不是整体数据传输的超时时间。

3、connectionRequestTimeout

同样查阅是客户端从连接池中获取连接的超时时间,那这里验证的话我们就需要自己指定线程池大小,让连接池满了,从而导致获取不到连接。

调整客户端代码如下:

运行代码,结果如下:

可以看到已经报错Timeout waiting for connection from pool。


通过以上验证均已理解connectionRequestTimeout、connectTimeout和socketTimeout三个超时时间的意义,下次再遇到线上异常报错就可以直接根据异常类型定位。如果是ConnectTimeout多半就是服务端网络问题、服务端关机、服务端端口问题等。如果遇到SocketTimeout多半就是服务端忙碌,线程数满了,或者服务端性能受限来不及处理请求等等,目前connectionRequestTimeout还基本没见到过这类异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

web.xml超时时间不生效_HttpClient三个超时时间详解 的相关文章

  • 在python中读取PASCAL VOC注释

    我在 xml 文件中有注释 例如这个 它遵循 PASCAL VOC 约定
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • 通过 XML 将重复事件添加到 Google 日历

    我正在尝试通过协议 API 将重复事件添加到我的日历中 我从在 Google 界面中创建的事件中获取了重复标记的语法 并将其用于我的创建请求中 这是我提交的内容
  • XSLT - 追加同级

    我正在尝试使用 XSLT 来附加context param作为最后一个兄弟姐妹 没有共同的父元素 因此任务有点困难 我想附加以下元素
  • 根据属性值使用 xslt 合并两个元素

    这是我的源文件的样子
  • XPath 中的 ., 有什么用?

    为什么在某些 XPath 表达式中句号后面使用逗号 这是一个例子 Set nlist doc selectNodes book author first name starts with M 我试图用谷歌搜索这个 但字面意思 运算符似乎不喜
  • 检查 XML 元素是否存在

    如何验证 XML 文件中是否存在特定元素 假设我有一个不断变化的 XML 文件 我需要在读取 解析它之前验证每个元素是否存在 if doc SelectSingleNode mynode null 应该这样做 显然 其中 doc 是您的 X
  • JSPX 命名空间对于 EL 函数不可见?

    我正在尝试使用 JSPX JSP 的纯 XML 语法 并遇到看起来应该可以工作但实际上却不起作用的情况 我使用 jsp root 元素中的命名空间声明导入标签库 然后稍后将这些用于元素以及 EL 函数
  • 在 Java 中创建 XML 文件的最佳方法是什么?

    我们目前使用 dom4j 来创建 XML 文件 不过 我猜现在有更好的东西了 如果我们使用的是 Java 1 6 或更高版本 那么在编写 XML 文件时最好使用什么类 运行速度最快 使用简单 我不需要构建一个 DOM 然后编写整个 DOM
  • CakePHP Xml 实用程序库触发 DOMDocument 警告

    我正在使用 CakePHP 在视图中生成 XMLXML核心库 http book cakephp org 2 0 en core utility libraries xml html xml Xml build data array ret
  • 删除Android所有语言中的字符串

    我有一个包含多个翻译的应用程序 我想删除一些字符串 我怎样才能重构并删除它们一次 例如在默认情况下strings xml文件并自动将删除传播到其他翻译的其他 strings xml 文件 您可以通过 Android Studio 中的 翻译
  • 如何在 Spring 属性中进行算术运算?

  • Android:默认 XML 编辑器不再打开 [不支持的内容类型错误]

    我使用 Eclipse 在 Android 中开发应用程序已经有一段时间了 我最近将Android SDK平台更新到3 0 API 11 现在 我无法通过双击打开 AndroidManifest xml 或 Layout 文件夹中的任何其他
  • 使用 dpi 与 dp 缩放图像之间的差异

    我拥有所有由九个补丁位图组成的 dpi 可绘制目录 xxhdpi 和 xxxhdpi 是否必要 可绘制目录中的可绘制资源文件可检索所有缩放的位图 并且我使用可绘制资源文件 现在 我的问题是我还根据大小 小 正常等 创建了 缩放 布局目录 其
  • 在 JAVA 中使用 SAX 解析器从 XML 文件中提取文本节点

    因此 我目前正在使用 SAX 尝试从我正在处理的大量 xml 文档中提取一些信息 到目前为止 提取属性值确实很容易 但是 我不知道如何从文本节点中提取实际值 例如 在给定的 XML 文档中
  • REXX 或 JCL 中的 XML 处理

    在 PS 文件中 我有如下 XML 数据 For ex
  • 如何使用XPath选择非空段落?

    我想要抓取的网页具有类似的结构 每个都有一个段落是一个问题 一个段落是一个答案 我想抓取每个问题和答案并将它们存储在两个项目中 问题是 在某些页面上 问题和答案分别是 xxx p 1 and xxx p 2 但在其他页面上 xxx p 1
  • Android - 保存动态更改布局的状态

    我有一个布局 用户可以在其中添加按钮并将其放置在他们想要的位置 我想允许用户保存他们的布局 以便下次打开应用程序时加载它 有谁知道我是否可以将文件保存到 SD 卡上 或者 我可以使用某种layout getXml 方法并将其放入我的应用程序
  • Text::平衡和多行 xml

    看来我有点失落了 我需要解析一个大的 大约 100 mb 且相当难看的 xml 文件 如果我使用parsefile 它返回错误 文档元素后的垃圾 但它会很乐意解析文件的较小元素 所以我决定将文件分解为元素并解析它们 由于不鼓励使用正则表达式
  • 将维基百科中的表格加载到 R 中

    我正在尝试从以下 URL 将最高法院法官表加载到 R 中 https en wikipedia org wiki List of Justices of the Supreme Court of the United States http

随机推荐