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)下游服务超时

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

默认路由配置

默认路由: 在末节路由器上使用。(末节路由器是前往其他网络只有一条路可以走的路由器) 默认路由被称为最后的关卡,也就是静态路由不可用并且动态路由也不可用,最后就会选择默认路由。有时在末节路由器上写静态路由时…

自动驾驶算法(五):Informed RRT*算法讲解与代码实现(基于采样的路径规划) 与比较

目录 1 RRT*与Informed RRT* 2 Informed RRT*代码解析 3 完整代码 4 算法比较 1 RRT*与Informed RRT* 上篇博客我们介绍了RRT*算法:我们在找到一个路径以后我们还会反复的搜索。 Informed RRT*算法提出的动机(motivation)是能否增加渐近最优的速度呢?…

【数据结构】树家族

目录 树的相关术语树家族二叉树霍夫曼树二叉查找树 BST平衡二叉树 AVL红黑树伸展树替罪羊树 B树B树B* 树 当谈到数据结构中的树时,我们通常指的是一种分层的数据结构,它由节点(nodes)组成,这些节点之间以边&#xff08…

基于级联延迟信号消除的锁相环(CDSC_PLL)技术MATLAB仿真

微❤关注“电气仔推送”获得资料(专享优惠) 基于级联型延迟信号消除(CDSC)的锁相环技术(CDSC-PLL),该锁相环克服了传统dq 锁相环在电网电压畸变或不对称时存在较大稳态误差的缺点。CDSC-PLL是在…

Ansible中的任务执行控制

循环 简单循环 {{item}} 迭代变量名称 loop: - value1 - value2 - ... //赋值列表{{item}} //迭代变量名称循环散列或字典列表 - name: create filehosts: host1tasks:- name: file moudleservice:name: "{{ item.name }}"state: "{{…

FRI及相关SNARKs的Fiat-Shamir安全

1. 引言 本文主要参考: Alexander R. Block 2023年论文 Fiat-Shamir Security of FRI and Related SNARKsAlbert Garreta 2023年9月在ZK Summit 10上分享 ZK10: Fiat-Shamir security of FRI and related SNARKs - Albert Garreta (Nethermind) 评估参数用的Sage…

Git客户端软件 Tower mac中文版特点说明

Tower mac是一款Mac OS X系统上的Git客户端软件,它提供了丰富的功能和工具,帮助用户更加方便地管理和使用Git版本控制系统。 Tower mac软件特点 1. 界面友好:Tower的界面友好,使用户能够轻松地掌握软件的使用方法。 2. 多种Git操…

edge浏览器的隐藏功能

1. edge://version 查看版本信息 2. edge://flags 特性界面 具体到某一特性:edge://flags/#overlay-scrollbars 3. edge://settings设置界面 详情可参考chrome: 4. edge://extensions 扩展程序页面 5. edge://net-internals 网络事件信息 6. edge://component…

excel制作透视表

场景描述: 有一张excel表,存在多条记录,现在需要把相同名称的商品的数量求和,放在一起展示 操作步骤: 删除最后一行数据 选中不显示分类汇总 以表格形式展示

STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)

STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式) 一、所用材料: STM32F103C6T6最小系统板 STM32CUBEMX(HAL库软件) MDK5 示波器或者逻辑分析仪 二、所学内容: 通过定时器TIM的输出比较模式得到预…

第21期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练 Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…

【计算机网络实验/wireshark】tcp建立和释放

wireshark开始捕获后,浏览器打开xg.swjtu.edu.cn,网页传输完成后,关闭浏览器,然后停止报文捕获。 若捕获不到dns报文,先运行ipconfig/flushdns命令清空dns缓存 DNS报文 设置了筛选条件:dns 查询报文目的…

BO(Business Object)是一种用于表示业务对象的设计模式

BO是 Business Object 的缩写,是一种用于表示业务对象的设计模式。在Java中,BO的主要作用是 封装业务逻辑,实现业务流程的可重用性和可维护性。 BO主要有以下几个作用: 实现业务逻辑的封装:将业务逻辑封装在BO对象中&a…

【完美世界】石昊拒绝云曦相认,爱而不得,云曦悲伤无助

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料《完美世界云曦篇》最新一集,为了云曦,石昊不远十万里,亲自送她回家,这份感情之真挚,绝对毋庸置疑。然而,令人感到不解的是&…

【KVM】软件虚拟化和硬件虚拟化

前言 大家好,我是秋意零。 今天介绍的内容是虚拟化技术以及软件虚拟化和硬件虚拟化。 👿 简介 🏠 个人主页: 秋意零🔥 账号:全平台同名, 秋意零 账号创作者、 云社区 创建者🧑 个…

HCIA数据通信——路由协议

数据通信——网络层(OSPF基础特性)_咕噜跳的博客-CSDN博客 数据通信——网络层(RIP与BGP)_咕噜跳的博客-CSDN博客 上述是之前写的理论知识部分,懒得在实验中再次提及了。这次做RIP协议以及OSPF协议。不过RIP协议不常用…

Mac连接linux的办法(自带终端和iterm2)

1. 使用Mac自带终端Terminal 1.1 点击右上角的聚焦搜索,再输入终端 1.2 查找linux系统的ip地址 在虚拟机里输入如下命令,找到蓝色区域的就是ip地址 ip addr 如果没有显示ip地址,可以重新安装一下虚拟机,之后确保以太网的连接是打…

【PC电脑windows-学习样例tusb_serial_device-ESP32的USB模拟串口程序+VScode建立工程+usb组件添加+-基础样例学习】

【PC电脑windows-学习样例tusb_serial_device-ESP32的USB模拟串口程序-基础样例学习】 1、概述2、实验环境3-1、 物品说明3-2、所遇问题:ESP32 cannot open source file "tinyusb.h"或者“tinyusb.h:No such file or directory ....”3-3、解决问题&#…

京东大数据平台(京东数据分析):9月京东牛奶乳品排行榜

鲸参谋监测的京东平台9月份牛奶乳品市场销售数据已出炉! 9月份,牛奶乳品市场销售呈大幅上涨。鲸参谋数据显示,今年9月,京东平台牛奶乳品市场的销量为2000万,环比增长约65%,同比增长约3%;销售额为…

JVM字节码文件浅谈

文章目录 版权声明java虚拟机的组成字节码文件打开字节码文件的姿势字节码文件的组成魔数(基本信息)主副版本号(基本信息)主版本号不兼容的错误解决方法基本信息常量池方法 字节码文件的常用工具javap -v命令jclasslib插件阿里art…