调用第三方API超时如何区分是连接超时还是响应超时

在Java中调用第三方接口时,遇到超时问题通常涉及两种类型的超时:连接超时(Connect Timeout)和响应超时(Read TimeOut)
要查看是对方响应超时还是自己方连接超时,可以通过设置Java的HttpClient的超时时间和捕获异常来判断。以下是一个示例:

import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

public class TimeoutTest {
    public static void main(String[] args) {
        // 设置连接超时时间,单位毫秒
        int connectionTimeout = 5000;
        // 设置读取数据超时时间,单位毫秒
        int socketTimeout = 10000;

        // 创建HttpClientBuilder
        HttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, connectionTimeout);
        HttpConnectionParams.setSoTimeout(httpParams, socketTimeout);
        RequestConfig requestConfig = RequestConfig.custom().setParams(httpParams).build();

        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpGet httpGet = new HttpGet("http://example.com");
            httpGet.setConfig(requestConfig);

            try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
                // 处理响应
            }
        } catch (org.apache.http.conn.ConnectTimeoutException e) {
            System.out.println("连接超时");
        } catch (org.apache.http.socket.TimeoutException e) {
            System.out.println("响应超时");
        } catch (Exception e) {
            System.out.println("其他异常: " + e.getMessage());
        }
    }
}

在这个示例中,我们设置了连接超时时间为5秒,读取数据超时时间为10秒。通过捕获org.apache.http.conn.ConnectTimeoutExceptionorg.apache.http.socket.TimeoutException异常,可以判断是连接超时还是响应超时。针对于一些框架包装后的异常若无法区分具体超时异常类型就需要从日志中详细查看是否有read读取关键信息或connect连接关键信息。
在这里插入图片描述
不能简单的根据同一个线程调用API接口到抛出异常的时间差来进行判断,因为默认配置的响应超时时间是从连接成功开始计算的。因此日志里面的时间差其实等于 连接超时时间 +响应超时时间
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/800980.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

灌区流量监测设备:农田灌溉的“智慧眼”

随着现代农业的不断发展,对灌溉技术的要求也越来越高。传统的灌溉方式不仅效率低下,而且容易造成水资源的浪费。如今,灌区流量监测设备以其独特的优势,成为农田灌溉的新宠,被誉为农田的“智慧眼”。 精准把控&#xff…

Java 实验五:继承与接口

一、实验目的 1、通过实验内容,锻炼自身进行需求分析,系统设计以及编程开发的能力,了解软件开发的流程。 二、实验环境 Jdk 1.8; Eclipse 三、实验内容 试分析停车场系统的常用业务功能,梳理出基本需求&#xff0…

优阅达线上分享:快速上手 Tableau 计算功能

无论是想获取更深入的业务洞察,还是希望实现更复杂的数据图表,Tableau 计算都能助你实现需求。然而,对于没有数学或统计经验的用户来说,快速理解并掌握 Tableau 计算功能的逻辑和用法并非易事。 如果你刚接触 Tableau 计算不知从…

把ros消息转换成中文输出

把ros消息转换成中文输出 c实现 发布 //发布性能评估数据 /trilateration_time_log void publishTrilaterationLog(const int reflectorPanelPoints_size,const double duration_count,const std::string& resultType,const std::string& resultChineseMessage,cons…

python基础知识点(蓝桥杯python科目个人复习计划69)

做些基础题 第一题:微生物增值 题目描述: 假设有两种微生物x和y。 x出生后每隔3分钟分裂一次(数目加倍),y出生后每隔2分钟分裂一次(数目加倍)。 一个新出生的x,半分钟之后吃掉一…

Git常用命令以及使用IDEA集成Gitee

目录 一、设置用户签名 二、初始化本地库 三、查看本地库状态 四、添加文件到暂存区 五、提交本地库 六、修改文件 七、版本穿梭 八、Git分支 九、分支的操作 9.1、查看分支 9.2、创建分支 9.3、切换分支 9.4、合并分支 十、团队协作 十一、Idea集成Git 11.1、配…

初识C++|类与对象(上)

🍬 mooridy-CSDN博客 🧁C专栏(更新中!) 1. 类的定义 1.1 类定义格式 • class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。 类体中内容…

【Web服务与Web应用开发】【C#】VS2019 创建ASP.NET Web应用程序,以使用WCF服务

目录 0.简介 1.环境 2.知识点 3.详细过程 1)创建空项目 2)添加Web表单 3)使用Web表单的GUI设计 4)添加服务引用 5)在Web的button函数中调用服务,获取PI值 6)测试 0.简介 本文属于一个…

如何直接套用模板,快速搭建一个3D展示页面?

随着Web3D技术的飞速进步,网页设计实现了从平面二维到立体三维的华丽蜕变,这一变革为品牌营销领域注入了前所未有的互动活力。多样化的3D营销手段,不仅极大地吸引了消费者的目光,还显著提升了品牌形象与销售量,助力企业…

各类专业技术的pdf电子书

从业多年,收集了海量的pdf电子书籍,感兴趣的私聊。

探索智慧校园德育系统的学生考核之道

在当代教育领域,智慧校园德育管理系统的学生考核功能正逐渐成为推动学生全面发展的重要引擎。它不仅革新了传统德育评价的方式,还深度融入了学生日常的学习生活,成为连接学生、教师与学校管理层之间沟通与理解的桥梁。德育考核功能的核心在于…

Excel办公技巧:制作二级联动下拉菜单

分享制作二级联动下拉菜单的方法,即使数据有增删,菜单也能自动更新! 可以通过先定义名称,再结合数据验证,来做二级联动下拉菜单。 1. 准备数据 首先,我们需要准备好要进行二级联动下拉菜单的数据&#xff…

【大模型入门】LLM-AI大模型介绍

大语言模型 (LLM) 背景 🍹大语言模型 (Large Language Model) 是一种人工智能模型, 它们通常包含数千亿甚至更多的参数,并在大规模数据集上进行训练。大语言模型可以处理多种自然语言任务,如文本分类、问答、翻译、对话等等。 自然语言模型…

识别 TON 生态系统中前10种加密资产,以bitget 钱包为例

元描述:想要找到下一个 100 倍加密货币投资?请密切关注这篇文章;它揭示了所有可能很快变得非常有价值的 TON 网络宝石。 由 Telegram 提供支持的 TON(开放网络)生态系统正在蓬勃发展!这是一个充满激动人心的…

【雅思备考IELTS】美文阅读 艾米莉·勃朗特《呼啸山庄》Wuthering Heights by Emily Bronte

Reading Materials for IELTS (from books that I love) Episode 2 2024/7/15 By James Lee 说明: 奇崛、跌宕、爱恨分明,英国女作家艾米莉 勃朗特(Emily Bronte,1818-1848)短暂一生当中出版的唯一一本小说&#xff…

typescript新规范及vue3常用的属性解析【2024】

文章目录 如在vue中 使用tyescript来规范定义类型解释一下 < >的意思 定义 了 personList &#xff1a;是个数组 Array 且要告诉里面每一项 结构长什么样 Array<PersonInter>definepropsvue3中的hooks组件父子组件 方法、数据、相互调用 如在vue中 使用tyescript来…

C语言课程回顾:十、C语言之 指针

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 C语言之 指针 10 指针10.1 地址指针的基本概念10.2 变量的指针和指向变量的指针变量10.2.1 定义一个指针变量10.2.2 指针变量的引用10.2.3 指针变量作为函数参数10.2.4 指针变…

嵌入式热门领域有哪些?

嵌入式热门领域有哪些? 当前&#xff0c;嵌入式行业正处于快速发展阶段&#xff0c;并在多个领域呈现出蓬勃的热度。 物联网 物联网作为目前嵌入式行业的炙手可热领域之一&#xff0c;已经在各行业展现出了强劲的增长势头。嵌入式系统通过物联网连接各种物理设备和传感器&…

如何用Claude 3 Sonnet Artifacts实现对数据文件的可视化分析?

如何用Claude 3 Sonnet Artifacts实现对数据文件的可视化分析&#xff1f; Prompt模板&#xff1a; Initial Request: 初始请求&#xff1a; I have uploaded data of the number of Software Engineering Jobs in the US since May 2020. I need different visual creative…

AD复制原理图时候怎么保留原理图的元器件编号

AD复制原理图时候&#xff0c;默认复制过去所有编号全部丢失变成“&#xff1f;”&#xff0c;怎么保留原理图的元器件编号&#xff1f; 1.右上角打开设置&#xff1b; 2. Schematic---》Graphical Editing---》去勾选“选项&#xff1a;粘贴时重置元件位号Reset Parts Design…