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等协议的集合。现在࿰…...
广汽传祺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分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯Ἲ…...
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…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
