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

springboot常见网络相关错误及原因解析

在基于spring-boot开发过程尤其是上线后,经常出现网络相关的错误,令人难以琢磨和下手,所以就spring-boot使用过程中可能碰到的网络相关问题进行分析,结合网络转包、日志报错和前端输出,针对网络连接超时、连接被拒绝、读超时等异常进行分析,有助于理解发生问题的根本原因,并快速定位和解决问题。

一、前端直接访问服务

1)服务地址不通

当使用Chrome访问服务的地址不存在时,Chrome会使用三个不同的源端口发送SYN报文,并且使用的规避算法,连续发送4次重连请求。就是大约1秒后第一次重发,距离重发第一次2秒后第二次重发,距离重发第二次4秒后第三次重发,具体重发第三次8秒后进行第4次重发,因为均未收到应答,浏览器判断连接不能建立,所以会显示如下信息:

当使用Postman访问服务地址不存在时,用一个源端口连续发起SYN请求,针对每个SYN请求,按照以上算法连续发送5次,均未收到确认时(也就是10次请求均无应答),在控制台显示如下信息:

2)服务地址通但端口不存在

使用Chrome时,连续发起两次SYN请求,服务端以RST应答,针对每个SYN,又进行了4次重传,Postman最终展示连接被拒绝,在控制台输出如下:

使用Postman时,会大约每500毫秒发送一波SYN请求,每一波包括相隔几毫秒的两个SYN请求,共5波10个SYN请求,服务端以RST应答,Postman最终展示连接被拒绝,在控制台输出如下:

3)服务正常但请求路径错误

使用浏览器访问时,服务端返回HTML格式的错误说明,具体示例如下:

使用Postman访问时,服务端返回json格式的错误说明,具体示例如下:

4)连接池耗尽

    使用Chrome或Postman请求服务时,如果服务端连接耗尽,Chrome和Postman将一直等待,直到得到连接并返回结果

5)服务响应慢

使用Chrome或Postman请求服务时,缺省情况下永不超时,所以会一直等待,直到服务返回结果。

二、服务间调用-无超时

以下的测试基于浏览器或Postman访问A服务,A服务又调用B服务,并且均基于springboot+RestTemplate,并且RestTemplate未设置超时。

1)B服务地址不通

       A服务在微秒级别内连续发送两次连接请求,后面每个请求按照规避算法重传了4次,然后A服务抛出连接超时异常,如下图所示:

由于该异常未被捕捉,所以该异常返回到前端。前端显示的出错信息就是上面标红的内容。

Postman调用结果:

Chrome调用结果

2)B服务端口不存在

   A服务在微秒级别内连续发送两次连接请求,后面每个请求按照规避算法重传了4次,对于每个请求,B服务均以RST应答,A服务抛出拒绝连接异常,如下图所示:

由于该异常未被捕捉,所以该异常返回到前端,前端显示的出错信息就是上面标红的内容。

Postman调用结果:

Chrome调用结果

3)B服务连接池满

B服务连接池满时,A服务调用B服务去不到连接将无限期等待,直到取到连接后再发送请求,在前端、A服务和B服务均不报错。

三、服务间调用-有超时

以下的测试基于浏览器或Postman访问A服务,A服务又调用B服务,并且均基于springboot+RestTemplate,并且RestTemplate设置超时时间为5秒。

1)B服务地址不通

    通过前端调用A服务,A服务调用B服务时,相差6微秒连续发送两个SYN请求,然后针对这两个SYN请求,又进行了两次重传,因为超时时间到,所以A服务抛出连接超时异常,具体输出如下:

因为A服务并未捕捉该异常,所以直接返回到前端。

使用Postman时,输出信息如下:

使用chrome时,输出信息如下:

2)B服务地址通到端口不存在

通过前端调用A服务,A服务调用B服务时,相差6微秒连续发送两个SYN请求,然后针对这两个SYN请求,又进行了四次重传,然后A服务抛出拒绝连接异常,具体输出如下:

由于异常未捕捉,所以直接返回到前端。

Post请求时,出错信息如下:

浏览器请求时,出错信息如下:

3)B服务正常,但响应时间超出5秒

前端调用A服务时,A服务与B服务经过3次握手建立连接后,发送HTTP请求,并做了一次重传,然后超时时间到,A服务发送FIN中断连接,此时A服务抛出读耗时异常:

Postman调用时,返回结果如下图所示:

使用Chrome时,返回结果如下图所示:

4)B服务连接被耗尽

A服务请求B服务,因B服务连接池耗尽,抛出读超时异常,错误输出如下:

因异常未捕捉,所以返回前端。

Chrome出错信息如下:

Postman出错信息如下:

四、通过网关调用服务

使用Springcloud Gateway作为网关。

1)下游服务地址不通

下游服务地址不通时,网关连续进行五次连接后报连接超时错误,报错信息如下:

网关并未把错误原封不动返回前端,而是做了处理,Postman端报错信息如下:

2)下游服务端口不存在

下游服务端口不存在时,网关连续多次SYN请求,都收到RST报文,抛出拒绝连接异常,报错信息如下:

网关并未把信息原封不动返回前端,而是错了处理,出错内容与地址不通相同,具体如下:

3)下游服务处理太慢

     下游服务处理很慢时,SpringCloud gateway一直等待处理完成后把结果返回给前端

4)下游服务连接耗尽

下游服务连接耗尽时,SpringCloud gateway一直等待处理完成后把结果返回给前端

5)下游服务超时

下游服务超时有两种情况,一种是下游服务调用其下游服务地址不通,一种是下游服务调用其下游服务时下游服务处理太慢。

针对第一种情况,下游服务抛出连接超时错误,具体如下图所示:

如果未捕捉异常,则下游服务把异常信息返回到网关,由网关返回前端,前端报错信息如下:

针对第二种情况,下游服务抛出读超时错误,具体如下图所示:

如果下游服务未捕捉异常,则把异常消息发挥网关,由网关返回前端,前端报错信息如下:

相关文章:

springboot常见网络相关错误及原因解析

在基于spring-boot开发过程尤其是上线后,经常出现网络相关的错误,令人难以琢磨和下手,所以就spring-boot使用过程中可能碰到的网络相关问题进行分析,结合网络转包、日志报错和前端输出,针对网络连接超时、连接被拒绝、…...

【C语言_线程pthread_互斥锁mutex_条件触发cond 之解析与示例 (开源)】.md updata:23/11/03

文章目录 线程 pthread线程 vs 进程线程退出 等待 消息传递join:等待,传参void*; exit:退出,对参数赋值void**; 互斥锁 mutex互斥锁mutex条件cond_等待wait、触发signal 控制线程执行 补充: 宏-静态初始化 互斥锁/条件 线程 pthread 线程 vs…...

mongodb如何删除数据并释放空间

mongodb删除数据后不会直接释放内存空间,是因为使用了一种称为“延迟删除”的策略。这意味着当一个文档被删除时,它仍然会占用一定的内存空间,直到这个空间被垃圾回收器(Garbage Collector)回收。 删除数据操作前建议先…...

k8s之集群调度

目录 调度 工作机制 调度过程 调度算法 优先级 指定调度节点 调度 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令…...

代码随想录算法训练营第四十二天丨 动态规划part05

1049.最后一块石头的重量II 思路 本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。 感觉和昨天讲解的416. 分割等和子集 (opens new window)非常像了。 本题物品的重量为 stones[i],物品的价…...

[css] flex 子元素自动撑开父元素宽度

对于水平排列的情况,我们可以设置父元素的flex-direction属性为row。这样,子元素将会水平排列在一行内,并自动撑开父元素的宽度。如果子元素的宽度总和超过了父元素的宽度,则子元素会被压缩,以适应父元素的宽度。 对于…...

全新干货!一招教你迅速提升流量主收入!包你轻松月入过万

也不怕大家笑话,才哥以前收入每天才一块钱,连瓶水都买不了, 可是自从我开始接触老年粉私域后,一个搬运公众号的流量主收益两个月后就可以用“浴火重生”来形容了。 一个搬运公众号一天的流量主收益比我原创两年的个人公众号收益还…...

连接两个dataframe

concat import pandas as pd df1 pd.DataFrame({‘A’: [1, 2, 3], ‘B’: [4, 5, 6]}) df2 pd.DataFrame({‘A’: [7, 8, 9], ‘B’: [10, 11, 12]}) result pd.concat([df1, df2]) # 在行上连接 merge import pandas as pd df1 pd.DataFrame({‘key’: [‘A’, ‘B…...

【入门Flink】- 05Flink运行时架构以及一些核心概念

系统架构 Flink运行时架构Standalone会话模式为例 1)作业管理器(JobManager) JobManager 是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。每个应用都应该被唯一的 JobManager 所控制执行。 JobManger 又包含…...

网络协议的基本概念

网络协议的基本概念 随处可见的协议 在计算机网络与信息通信领域里,人们经常提及“协议”一词。互联网中常用的具有代表性的协议有IP、TCP、HTTP等。 “计算机网络体系结构”将这些网络协议进行了系统归纳。TCP/IP就是IP、TCP、HTTP等协议的集合。现在&#xff0…...

广汽传祺E9上市,3DCAT实时云渲染助力线上3D高清看车体验

今年5月21日,中国智电新能源旗舰MPV——广汽传祺智电新能源E9在北京人民大会堂举办上市发布会。 发布会现场(图源官方) 为了让更多的消费者能够在线上感受到广汽传祺E9的魅力,3DCAT实时渲染云与大圣科技合作为广汽传祺打造了一款…...

resource manager attributes structure(iofunc_attr_t) 扩展实例

文章目录 前言一、attributes structure(iofunc_attr_t)是什么二、iofunc_attr_t 扩展实例1. iofunc_attr_t 未扩展前的使用实例2. iofunc_attr_t 扩展后的使用实例总结参考资料前言 本文主要介绍如何扩展 QNX resource manager 的 attributes structure(iofunc_attr_t) 属性数…...

劳易测扫码条码分段读取实现方法

添加如下3个功能块:M10,M13和M27 设置BCL参数:Code type 1 为Code128 参数:Mode为Range 参数:Number Of digits 1 为条码最小长度 Number Of digits 2 为条码最大长度。 设置M10:Mode(With …...

【Linux】Nignx及负载均衡动静分离

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯&#x1f3a…...

AI:50-基于深度学习的柑橘类水果分类

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…...

mysql 中!= 到底走不走索引?

mysql 中! 到底走不走索引? 很多人疑惑! 到底走不走索引, 这里可以肯定的说该操作是可以走索引的,但实际情况中都为啥都不走索引呢? 首先我们要知道走索引与数据量和数据趋势(cardinality)有很大的关系&…...

4 sql语法基础

1、DISTINCT 相同值只会出现一次。它作用于所有列,也就是说所有列的值都相同才算相同。 2、LIMIT 限制返回的行数。可以有两个参数,第一个参数为起始行,从 0 开始;第二个参数为返回的总行数。 返回前 5 行: SELECT * FROM myt…...

网络工程师应知应会:基础知识(5)

一、防火墙区域结构 防火墙按安全级别不同,可划分为内网、外网和 DMZ 区。 (1) 内网。 内网是防火墙的重点保护区域,包含单位网络内部的所有网络设备和主机。该区域是可信的,内网发出的连接较少进行过滤和审计。 (2) 外网。 外网是防火墙重…...

Minio多节点多驱动分布式部署官网文档翻译

原文链接: Deploy MinIO: Multi-Node Multi-Drive — MinIO Object Storage for Linux The procedures on this page cover deploying MinIO in a Multi-Node Multi-Drive (MNMD) or “Distributed” configuration. MNMD deployments provide enterprise-grade p…...

python连接clickhouse (CK)

Author: tkhywang 2810248865qq.com Date: 2023-11-01 11:28:58 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-11-01 11:36:25 FilePath: \PythonProject02\Python读取clickhouse2 数据库数据.py Description: 这是默认设置,请设置customMade, 打开koroFileHead…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...