IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> postman触发任务处理,长时间未响应时,自动retry,导致SFTP连接意外中断 -> 正文阅读

[开发测试]postman触发任务处理,长时间未响应时,自动retry,导致SFTP连接意外中断

背景

今天写了一个数据处理任务,用于后端定时触发。并为这个定时任务提供了一个触发接口,用于手动触发。
这个任务的处理逻辑,大概是从SFTP上拉取文件,并对文件进行解析。任务写完后,在测试时,数据量较少,并未发现问题。

现象

今天在正式环境手动触发任务时,由于处理时间较长,大概在30分钟左右。开始时,任务处理正常。处理了一段时间后,任务持续报异常,后台日志持续飘红。跟踪日志发现,SFTP连接被意外中断,导致任务处理失败。即使程序自动重新创建连接,仍然会被意外中断。

重试多次,现象可以复现,且均是出现在任务执行一段时间之后。

通过在任务处理的入口处增加日志,发现了问题原因。一段时间之后,后端收到了第二次任务处理的请求。第二次任务处理时,对第一次还未执行完成的任务造成了影响。

但是又有了两个问题:

  1. 第二次触发的请求是哪里来的?我用postman只触发了一次请求,且这次请求的结果还未返回。
  2. 为什么第二次的任务处理会关闭第一次的任务连接。

猜想

  1. 第二次请求
    通过观察,猜想,第二次请求是postman触发的。因请求长时间未得到响应,所以postman自动触发了一次重试。于是,我再次使用postman触发任务,并取消postman的等待响应。10分钟之后,后端未收到二次请求,且第一次任务正常执行完成。由此可知,postman在一段时间内未得到响应,将触发重试。
  2. 关闭连接
    通过查看代码发现,SFTP的连接工具类,使用的是单例模式,且共享一个连接。于是第二个任务在调用关闭处理时,第一次任务的连接也被关闭了。于是后端出现了连接意外关闭的错误。

解决方案

  1. 针对postman自动重试,如果不经常使用,可以考虑在触发任务后,手动停止postman的响应等待。但如果接口调用频繁的话,需要做特殊处理。此处提供几个思路。
  • 将任务处理包装成线程任务。在接口触发时,创建一个线程任务,另起线程执行,同时返回接口响应。对于这种方式,需要考虑接口的并发处理。
  • 使用内存锁,任务触发时,获取内存锁,如果获取到则触发任务执行,否则直接返回。该方式,可以阻断postman的自动重试。但同时也会阻止手动的重复执行,有利有弊。
  1. 针对连接异常关闭
    如果是单线程模式,则无需过多处理。
    对于并发模式,则可以考虑避免使用单例模式的连接管理。考虑将SFTP的连接进行池化管理。采用连接池,可以避免不同任务中的连接影响。
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:38:39  更:2021-11-22 12:40:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:33:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码