由RestTemplate引发的加班惨案

SpringCloud微服务核心组件Eureka与Nacos实战指南 微服务架构通过将单体应用拆分为独立部署的小型服务,显著提升了系统的可扩展性和开发效率。服务注册与发现作为微服务通信的基础设施,其核心原理是通过注册中心维护服务实例的动态目录。SpringCloud生态提供了Eureka和Nacos两种主流解决方案,其中Eureka采用AP模型保证高可用,而Nacos支持AP/CP模式切换并集成配置管理功能。在电商、金融等分布式系统中,配合Ribbon或SpringCloud LoadBalancer实现客户端负载均衡,能够有效提升系统吞吐量。本文通过电商项目实战,详细解析服 阅读详情

前言

今天真是美好的一天呢,股市一如往常地绿,我一如往常地坐在办公桌前敲代码。

上级交给我一个刷新历史数据的需求,一般刷新历史数据可以采用的方式有SQL脚本以及定时任务。

以往大多数时候我都是采用SQL脚本的方式,因为这次涉及接口的调用,于是打算使用后台任务来实现。

本来很日常的一个任务,没想到还会有意外的插曲。


过程

需求

根据新的业务逻辑修复历史数据,就是更新某些表的某些字段。

这里的业务就不详细介绍了。反正与技术无关。


设计和实现

1、将 需要更新的主表的主键 通过脚本刷到临时表,初始化为待处理状态。
(这样做是为了修复历史数据时不影响到其他业务对主表的操作)

2、创建临时定时任务,用代码实现取数的逻辑,其中涉及两次内部接口的调用。

3、批量处理完数据后,更新主表数据以及临时表的状态。

4、将接口的调用记录到临时日志表,主要字段有主表主键、接口标志、发起请求时间、返回结果时间、返回数据


测试结果

上面的步骤一气呵成,自以为胸有成竹。当然开发机也有自测过了,流程是没问题的。

于是提交给测试部进行测试,此时已经接近下班时间了。

结果测试告知数据跑着跑着就卡住了,待处理的数据量没有继续减少了。

想想心都凉了,这是要加班的节奏呀,于是连忙开始分析。

查看了临时表,待处理的数据量确实没有继续减少了;

再查看临时日志表,按时间降序后,发现大多数接口的调用间隔时间都是毫秒级别的,但是极少数调用的间隔时间很长,大到几分钟。现在就是卡死不动了,也没新的日志产生。

那时候怀疑是逻辑问题,于是检查了一遍,确实找不出问题,因为本身这个任务的处理逻辑也不复杂。

于是我重启了测试机的定时任务,发现又好使了。。。


分析

从日志看确实没打印有效的信息,这可能是我日志埋点埋得不好。我的锅。

根据这现象,在网上查找了一些资料以及和同事讨论后,锁定了一个方向,那就是跟请求接口有关的RestTemplate。

在网络上其中有一篇文章《记录RestTemplate一个自己挖的坑》如下分析:
来自网络
另外我单独测了任务中所调用的接口,响应时间平均下来也是毫秒级别。

所以越来越确定是由于Http请求造成这次任务的异常。

查看了这次任务中使用的请求工具,也就是RestTemplate。

以前倒没怎么注意这个小家伙,这次找了一些关于它的资料。


解决

解决方法就是为RestTemplate设置超时时间,避免过长的无响应连接所带来的耗时影响。

连接失败则断开,再进行重连即可。

原先使用的默认RestTemplate
  <bean id="restTemplate" class="org.springframework.web.client.RestTemplate" />

设置了超时的RestTemplate
  <!-- 同步restful,3s超时 -->
  <bean id="restTemplate3sTimeout" class="org.springframework.web.client.RestTemplate">
    <constructor-arg>
      <bean class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
        <property name="readTimeout" value="3000"/>
        <property name="connectTimeout" value="3000"/>
      </bean>
    </constructor-arg>
  </bean>
用Python+LLM实现小说自动转剧本:从爬取到生成的完整实战指南(附GitHub源码) 本文提供了一份完整的实战指南,详细介绍了如何利用Python和大语言模型(LLM)构建一个自动化的小说转剧本工具。文章从网络爬虫获取文本开始,逐步讲解了使用LLM进行智能解析与结构化、集成专业模型进行情绪分析与动作生成,最终合成并输出格式规范的剧本文档。通过模块化架构设计和附带的GitHub源码,帮助开发者掌握从数据获取到内容生成的全流程,实现高效的小说剧本转换器。 阅读详情

相关推荐

QGIS-空间分析-核密度分析

本文在QGIS软件中使用核密度估计法分析全球历年的地震数据,旨在分析出地震频发且严重的区域,为地震防控提供参考依据。全球历年地震数据来源于网络,仅用于技术学习探索。通过核密度分析,可以观察到南美、美国西部海岸线和太平洋北部区域在全球地震分布状态中是最为集中和强烈的。

imxiezy的博客 2467

HttpClient的三种超时

HttpClient的3种超时说明 /* 从连接池中取连接的超时时间 */ ConnManagerParams.setTimeout(params, 1000); /* 连接超时 */ HttpConnectionParams.setConnectionTimeout(params, 2000); /* 请求超时 */ HttpConnectionParams.setSoTimeout(params, 4000); 第一行设置ConnectionPoolTimeout:这定义了从Connection

日薪灬越亿的博客 718

【CQUT】从零开始龙芯杯-开始前的准备

不同级别的Cpu对于vivado综合的时间有较大影响,其中Cpu的单核、多核性能以及cache性能影响权重较高。因此,为了保证学习进度和效率,我们建议在Cpu不低于I5 12400的环境下进行学习。Vivado2023.2安装包约100GB,为了保证成功安装建议留出300GB硬盘空间。龙芯杯的许多资料被托管在gitee,你需要git指令将资料克隆到本地。指定用书:CPU设计实战 Loongarch版 作者:汪文祥、邢金璋。Cpu性能对比网站:https://www.cpu114.com/

weixin_73689971的博客 906

RestTemplate使用详解

在项目中,当我们需要远程调用一个 HTTP 接口时,我们经常会用到 RestTemplate 这个类。这个类是 Spring 框架提供的一个工具类。RestTemplate 是一个同步的 Rest API 客户端。下面我们就来介绍下 RestTemplate 的常用功能。

Java+GO+JS全栈工程师-鹤冲天的博客:编程辅导~商务合作~技术交流 3771

2026 AI编程环境安装指南:从下载、部署到流式验证

AI编程环境已不再是传统软件安装,而是融合硬件兼容性、模型运行时与IDE插件协同的系统工程。其核心原理在于:本地GPU驱动需匹配量化运行时(如Ollama v0.3+对CUDA 12.1+的强制要求),协议层依赖gRPC流式响应,生态层则要求插件签名与模型源可信校验。这一技术组合显著提升AI代码生成的实时性与生产就绪度,支撑微服务开发、CI/CD智能补全、本地LLM推理等关键场景。本文聚焦AI编程软件下载与安装过程中的可复现部署实践,覆盖macOS/WSL2双平台、NVMe模型加速、离线校验及原子化功能验证

weixin_30480075的博客 581

人像抠图 + OpenGL ES 还能这样玩?没想到吧(附带源码)

OpenGL ES 利用抠图算法实现人像留色。

字节流动 3万+

org.springframework.web.client.RestTemplate详解

RestTemplate详解 GET请求 第一种方式:getForEntity函数,返回对象是ResponseEntity,ResponseEntity是对响应体的封装,包含响应状态码HttpStatus,响应头及相应体。响应体可以是自定义对象,例如如果是User对象,则可以写成这样ResponseEntity。getForEntity重载的函数有3个,使用及说明分别如下: getForEntity(URI url, Class responseType),第一个参数是请求的URI,第二个参数是响应体

ziania_cumt的博客 7509

S速度曲线轨迹规划(普通变频位置闭环控制算法详细介绍+SCL代码)

位置控制用PD控制器,详细内容介绍请查看下面博客文章:PD控制器算法详细解读_RXXW_Dor的博客-优快云博客鉴于积分和微分在工程上的大量应用,这篇博文主要讲解工程上的如何求导f'(x),导数反映的是函数(信号)的变化率,牛顿也是在研究运动的时候提出了微积分的概念,我们知道反映位移变化的快慢程度是速度v(t),反映速度变化快慢程度的物理量是加速度(速度的变化率)。

RXXW_Dor的博客 3886

restTemplate做长连接

restTemplate是springboot自带的http请求客户端,里面包装了HttpClient,是在SpringBoot项目中进行http请求常用的方式,本篇文章主要是讲解怎么进行restTemplate的长连接。 一、普通情况下的RestTemplate配置 @Bean public RestTemplate AchiementTemplateLongConnection(RestTemplateBuilder builder) { return builder.

lz710117239的博客 5359

用Python绘制DCA曲线详解及示例代码

在这篇文章中,我们将详细解释如何使用Python绘制DCA曲线,并提供示例代码。通过使用上述的示例代码和解释,你可以自己尝试不同的投资金额、期数和增长率来绘制自定义的DCA曲线。通过运行上述代码,我们将得到一个绘制了DCA曲线的图表。该图表将显示出DCA投资策略在给定投资金额、投资期数和增长率下的投资价值随时间的变化情况。在上述代码中,我们使用一个循环来计算每个投资期的DCA曲线值。现在,我们可以使用上述函数来计算DCA曲线的值,并将其绘制成图表。最后,我们返回计算得到的DCA曲线值列表。

TechPr的博客 1407

ARFoundation系列讲解 - 手部跟踪编程

通过使用ARFoundation的手部跟踪子系统,我们可以轻松地在AR应用程序中实现与用户手部的交互。通过设置AR环境、创建场景和相机、添加手部跟踪功能以及编写相应的脚本,我们可以开始在AR场景中跟踪和操作用户的手部。在Unity中创建一个新场景,并将AR Session组件添加到场景中的一个空对象上。手部跟踪的具体实现可能因AR设备和平台的不同而有所差异,你可能需要根据你的使用情况进行一些适配和调整。当你将手部放入AR场景中时,手部跟踪系统将触发相应的事件,并调用脚本中的回调函数。

2301_79325339的博客 355

HttpClient,RestTemplate超时设置

最近在使用RestTemplate的时候发现一个坑,就是某一次发送请求的时候突然卡住不动了,而且没有任何报错提示,重启下服务器就好,可见是因为某些特殊原因导致的,在网上找了下资料发现是因为没有设置超时时间,默认超时时间为永久,就想做一些试验复现下这个bug.

Cloud的专栏 5309

浏览器缓存导致代码不更新?一招解决部署后用户仍看到旧页面的问题

方案效果适用场景文件名哈希永久解决前端工程化项目HTTP缓存头控制精准控制需服务器权限Meta标签部分生效临时补救方案最佳实践:入口HTML禁用缓存,静态资源使用哈希文件名 + 长期缓存,达到「秒级更新」+「高性能」的平衡!

江拥羡橙的博客 810

restTempale不合理的调用初始化引发的惨案

restTempale不合理初始化引发的惨案

syrlyz的专栏 473

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

FastJson 升级导致引发的问题

fastJson 升级 导致 Resttemplate 没法请求

admin_024的博客 1741

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SpringBoot3中WebClient与RestTemplate的实战对比与迁移指南

本文深入对比了SpringBoot3中RestTemplate与WebClient的核心差异,重点阐述了从同步阻塞到响应式非阻塞的迁移必要性。通过详尽的配置示例、代码实战和错误处理对比,提供了从RestTemplate平滑迁移至WebClient的完整指南,帮助开发者提升微服务架构下的并发处理能力与资源利用率。

coffee的博客 353

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

错误重试“连环炸”:Spring Boot 重试策略失效、雪崩与死循环深度拆解

文章摘要: Spring Boot重试策略是一把双刃剑,配置不当可能引发雪崩、死循环等灾难性后果。本文剖析了典型重试失控场景,如重试风暴拖垮集群、死循环卡死Kafka消费、幂等缺失导致重复扣款等,并深入解析Spring Retry、Resilience4j等工具的正确用法。关键解决方案包括:指数退避算法、线程池隔离、幂等设计、熔断保护,以及HTTP客户端(RestTemplate/WebClient)和消息队列的精细化重试配置,帮助开发者规避重试陷阱,实现稳健容错。

深山技术宅的博客 429

Springcloud 介绍 和 Eureka的使用

Springcloud 介绍 和 Eureka的使用第一章 Springcloud 基础理论什么是微服务?SpringCloud介绍SpringCloud版本选择Cloud组件停更说明父工程项目搭建父工程pom文件复习DependencyManager和DependenciedRest微服务工程构建1. 微服务提供者支付module模块cloud-provider-payment80011. 新建模块2. 在pom中添加依赖3. 写yml4. 主启动5.业务类6.测试2.热部署Devtools (只能在开

qq_44252093的博客 1169

2025-微服务—SpringCloud-1~3

在微服务开发的过程中,需要引入服务治理功能,实现微服务之间的动态注册与发现,从此刻开始我们正式进入SpringCloud实战。

weixin_43154319的博客 1514

SpringCloud(1~4章):课前说明、理论入门、boot和cloud版本选择、组件替换、微服务架构编码构建(简写依赖版本号,跳过单元测试,Services窗口,热部署,封装协议,工程重构)

0. 课前说明 0.1 课程内容 SpringCloud + SpringCloud alibaba 0.2 技术要求 java8+maven+git、github+Nginx+RabbitMQ+SpringBoot2.0 0.3 课程大纲 零基础:1~4章 初级:5~9章 中级:10~16章 高级:17~21章 1. 微服务架构零基础理论入门(小白必看) 1.1 大纲 1.2 理论介绍 1.2.1 微服务架构概述 1)什么是微服务 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,

aa35434的博客 1205

证件照API接口开发指南:从原理到实战优化

计算机视觉技术在证件照处理领域实现了传统流程的数字化重构。通过人脸特征点识别、背景分割等核心算法,证件照API能够自动适配不同规格要求,确保头部比例、背景色等参数符合国际标准。这类接口的工程价值在于将专业的图像处理能力封装为标准化服务,开发者通过简单调用即可实现批量证件照生成、智能合规检测等功能。典型应用场景包括在线教育报名系统、企业HR SaaS、政务服务平台等需要高频处理标准化照片的业务场景。在技术实现上,合理运用预处理优化、多级缓存策略和流量控制机制,能显著提升API调用效率与稳定性。

weixin_34221332的博客 349

java中异常+连接重置_RestTemplate SocketException:连接重置使用Java 7,但不是Java 8

当执行使用Spring RestTemplate的HTTP POST,得到了一个java.net.SocketException异常:连接重置RestTemplate SocketException:连接重置使用Java 7,但不是Java 8然而,当我关于Java 8执行相同的代码相同的代码没有问题。我还没有发现任何与此相关的类似问题。有人可以指出我可能做错了什么吗?我试过甚至使用命令行参数,如...

weixin_30369183的博客 1104

restTemplate踩过的坑-spring clound--cloud内部服务调用重试次数

转载自 https://www.cnblogs.com/jimw/p/9037542.html 现在公司项目基本都从臃肿的项目转换成微服务的方向转换,因此也从中使用了spring clound的一些组件,在此过程中就遇到了restTemplate的坑。 起初,是直接注入RestTemplate,后来则不断的遇到错误日志无法请求,出现异常。 异常信息: org.springframework...

dayformyjob 6309

spring cloud2.0学习笔记-RestTemplate请求失败重试配置

说明 配置负载均衡的RestTemplate,默认是不开启动请求失败后重试的。你需要通过以下配置来配置重试相关属性。配置详细说明请查看SpringCloud相应版本官方文档。 spring.cloud.loadbalancer.retry.enabled=false client.ribbon.MaxAutoRetries client.ribbon.MaxAutoRetriesNextSer...

无名剑 7149

第三方授权登录:GitHub授权登录Java实现,以及RestTemplate的Connection reset错误

1、使用的技术 前端:超链接a标签 后端 :spring 的 RestTemplate 发送请求给GitHub 2、前期准备 先去GitHub设置GitHub app , (1)登录GitHub (2)头像—> settings----->Developer setting (3)填写信息应用名字Application name,Homepage URL网站主页(可填本地调试路径),Authorization callback URL回调路径(可填本地调试路径) (4)提交后获得Client I

violin256的博客 5186

RestTemplate的错误处理

我们的项目属于微服务架构,两个基础的服务分别是网关和认证鉴权服务。 在前端访问后台服务的时候,都经过网关转发,转发之前会进行鉴权认证,根据鉴权结果判断是否可以进行相应的请求转发。 问题描述 认证鉴权服务中,判断Token对应的人员是否有相应的权限,如果没有权限,返回401状态码并在响应体中传回错误信息。 网关与鉴权服务之间的服务调用通过RestTemplate进行(可以考虑转为Feign做...

achang07的博客 2万+
上一篇: 缓存中间件与数据库的相爱相杀
下一篇: 【福利】同性交友网站(github)知名项目(持续更新)
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值