前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >xxlJob排查 卡住了 - Feign或RestTemplate接口请求未设置超时时间导致

xxlJob排查 卡住了 - Feign或RestTemplate接口请求未设置超时时间导致

作者头像
oktokeep
发布2025-03-04 08:06:40
发布2025-03-04 08:06:40
4400
代码可运行
举报
文章被收录于专栏:第三方工具第三方工具
运行总次数:0
代码可运行

xxlJob排查 卡住了 - Feign或RestTemplate接口请求未设置超时时间导致

CloseableHttpClient 连接超时导致XxlJob调度阻塞,影响调度任务的执行 https://www.cnblogs.com/oktokeep/p/18205283

##修改配置: 方案1 微服务设置超时时间: # 设置连接超时时间(秒) feign.client.config.default.connectTimeout = 15000 # 设置读取超时时间(秒) feign.client.config.default.readTimeout = 15000

方案2 设置restTemplate超时时间

代码语言:javascript
代码运行次数:0
复制
import com.google.common.base.Charsets;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {
    @Bean("restTemplate")
    public RestTemplate restTemplate() {
        SimpleClientHttpRequestFactory httpRequestFactory = new SimpleClientHttpRequestFactory();
        httpRequestFactory.setConnectTimeout(30000);
        httpRequestFactory.setReadTimeout(30000);
        RestTemplate restTemplate = new RestTemplate(httpRequestFactory);
        restTemplate.getMessageConverters()
                .set(1, new StringHttpMessageConverter(Charsets.UTF_8));
        return restTemplate;
    }
}

恢复数据的方法 1.使用postman来请求 2.数据按日期获取,恢复数据, 通过单元类批量来处理。 设置开始和结束时间段区间。按日期来调用

伪代码

代码语言:javascript
代码运行次数:0
复制
        String beginDate = "2025-01-04";
        String endDate = "2025-02-13";
        String result = "";
        LocalDate beginLd = LocalDateTimeUtil.parseLocalDate(beginDate,"yyyy-MM-dd");
        LocalDate endLd = LocalDateTimeUtil.parseLocalDate(endDate,"yyyy-MM-dd");
        while (beginLd.isBefore(endLd) || beginLd.isEqual(endLd)){
            result += beginLd.toString() + "开始执行" + LocalDateTime.now();
            try {
//              taskService.couponTask(1,beginLd.toString());
                System.out.println("执行do..." + beginLd.toString());
                Thread.sleep(2000);
            }catch (Exception e) {
                e.printStackTrace();
            }
            result += beginLd.toString() + "执行完成" + LocalDateTime.now();
            beginLd = beginLd.plusDays(1);
        }
        System.out.println("result=" + result);

补充: Feign在整合Ribbon的时候,为了统一配置,就默认将自己的超时时间交由Ribbon管理 所以,在默认情况下,Feign的超时时间可以由Ribbon配置 而Ribbon默认连接和读超时时间只有1s,所以在默认情况下,Feign的超时时间只有1s。 eureka feign默认超时时间 Feign 客户端在使用 Eureka 时,默认的超时时间是 1 秒。这个超时时间可以通过配置文件来调整。 >> 默认的就是连接超时10s,读超时60s 在 application.yml 或 application.properties 中,可以通过以下配置来设置 Feign 的超时时间: # application.yml # 设置 Feign 客户端的连接超时时间(秒) feign.client.config.default.connectTimeout=5000 # 设置 Feign 客户端的读取超时时间(秒) feign.client.config.default.readTimeout=5000

或者使用 application.properties 格式: # application.properties # 设置 Feign 客户端的连接超时时间(毫秒) feign.client.config.default.connectTimeout=5000 # 设置 Feign 客户端的读取超时时间(毫秒) feign.client.config.default.readTimeout=5000 以上配置将 Feign 的连接超时时间和读取超时时间分别设置为 5 秒。如果你使用的是不同的客户端配置,需要将 default 替换为相应的配置名。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档