返回顶部
首页 > 资讯 > 后端开发 > Python >Resttemplate中设置超时时长方式
  • 498
分享到

Resttemplate中设置超时时长方式

2024-04-02 19:04:59 498人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录Resttemplate 设置超时时长RestTemplate 设置超时时间注意点Resttemplate 设置超时时长 为了满足调用需求,需要在使用Resttemplate发送

Resttemplate 设置超时时长

为了满足调用需求,需要在使用Resttemplate发送请求时,修改超时时长,网上给出了相关修改方法,代码如下:


HttpComponentsClientHttpRequestFactory rf =
            ((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory());
        rf.setConnectTimeout(30000);
        rf.setReadTimeout(30000);

但是在运行时报错:

org.springframework.http.client.InterceptinGClientHttpRequestFactory cannot be cast to org.springframework.http.client.HttpComponentsClientHttpRequestFactory

restTemplate.getRequestFactory()返回的类型无法转换,通过搜索和调试发现,在resttemplate中,必须在设置拦截器之前设置超时,因为在设置拦截器后无法设置超时,而我在设置中并没有设置过拦截器,应该是被默认构造了

所以解决方法如下:


restTemplate.setInterceptors(null);
HttpComponentsClientHttpRequestFactory rf =
            ((HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory());
rf.setConnectTimeout(30000);
rf.setReadTimeout(30000);

在设置超时之前,先将拦截器置空,这样就不会出现无法设置的问题,之后验证通过。

查看resttemplate源码后发现,之所以会出现这样的情况是因为在resttemplate的源码中,有这么一段代码:



public List<ClientHttpRequestInterceptor> getInterceptors() {
   return interceptors;
}
@Override
    public ClientHttpRequestFactory getRequestFactory() {
        ClientHttpRequestFactory delegate = super.getRequestFactory();
        if (!CollectionUtils.isEmpty(getInterceptors())) {
            return new InterceptingClientHttpRequestFactory(delegate, getInterceptors());
        }
        else {
            return delegate;
        }
    }

可以看到,在getRequestFactory()函数中,本来应该是返回ClientHttpRequestFactory类型的,但是它会先校验一次是否含有interceptors拦截器,如果拦截器非空,则会返回包含拦截器的InterceptingClientHttpRequestFactory,这样是无法转换为HttpComponentsClientHttpRequestFactory类型的,因此在前面处理的时候将拦截器置空,这样就可以返回不含拦截器的所需对象。

RestTemplate 设置超时时间注意点

1、保证系统中只有一个RestTemplate的配置;不然可能与你的预期不一致。

2、永远不要太相信自己写的代码;多打印日志才能真正知道调用时间;


long s = System.currentTimeMillis();
        try {
            responseEntity = restTemplate.exchange();
        } catch (Exception e) {
            long costTime = System.currentTimeMillis()-s;
            log.error("调用**服务异常,花费时间:{},错误:{}",costTime, e.getMessage(), e);
        }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Resttemplate中设置超时时长方式

本文链接: https://lsjlt.com/news/155862.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Resttemplate中设置超时时长方式
    目录Resttemplate 设置超时时长RestTemplate 设置超时时间注意点Resttemplate 设置超时时长 为了满足调用需求,需要在使用Resttemplate发送...
    99+
    2024-04-02
  • Springboot RestTemplate设置超时时间的简单方法
    目录排查:Java Config配置配置文件指定RestTemplate 设置超时时间注意点总结RestTemplate未设置超时时间,导致RabbitMQ队列大量堆积,消费者假死,...
    99+
    2024-04-02
  • RestTemplate如何设置超时时间及返回状态码
    今天小编给大家分享一下RestTemplate如何设置超时时间及返回状态码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。默认...
    99+
    2023-07-02
  • Oracle空闲超时时间设置方式
    目录oracle空闲超时时间设置Oracle长连接超时设置方法一方法二总结Oracle空闲超时时间设置 远程连接oracle 会出现超时连接断开的问题,所以需要修改oracle配置。 修改超时时间10分钟 ALTER P...
    99+
    2023-04-12
    Oracle空闲超时 Oracle时间设置 Oracle超时时间设置
  • java中Socket设置超时时间的两种方式
    目录Socket设置超时时间的两种方式方法1方法2整理一下二者的区别设置socket超时时间的那些坑Socket设置超时时间的两种方式 方法1 调用Socket的connct 方法打...
    99+
    2022-11-13
    java Socket Socket设置超时时间 java Socket超时设置
  • RestTemplate设置超时时间及返回状态码非200处理
    目录1.调试postForEntity请求2.设置超时时间默认情况下使用RestTemplate如果返回结果的状态码是200的话就正常处理,否则都会抛出异常; 1.调试postFor...
    99+
    2024-04-02
  • restTemplate超时处理的策略方案
    目录简单定制restTemplate超时处理pom.xml main: CustomConnectionKeepAliveStrategy: 简单定制r...
    99+
    2024-04-02
  • java中http请求之restTemplate配置超时时间(亲测有用!)
    问题:http请求发起后接收不到返回数据!!!【测试环境没出问题,发到正式环境就有问题】 项目中通过restTemplate发起请求: log.info("请求入参:{}",JSON.toJSONString(reques...
    99+
    2023-09-06
    java http servlet
  • python 设置方法超时
    #!/usr/bin/python #-*-coding:utf-8-*- import os,time,signal,platform,subprocess class TimeoutError(Exception): pas...
    99+
    2023-01-31
    方法 python
  • Java中对Socket设置超时时间
    java中对Socket设置超时时间主要有以下两种方式,我们来看一下:(推荐:java视频教程)方式1:Socket s=new Socket(); s.connect(new InetSocketAddress(host,port),1...
    99+
    2016-12-21
    Java
  • golang设置超时
    Golang是一种高效的编程语言,被广泛应用于各种领域的开发中。在一些特定场景下,我们需要设置超时来避免程序的死锁或卡死。在本文中,我将详细介绍Golang如何设置超时,以及几种设置超时的方式。一、使用channel在Golang中,可以使...
    99+
    2023-05-16
  • Redis分布式锁如何设置超时时间
    目录Redis分布式锁设置超时时间网络抖动Redis宕机Redis分布式锁的超时问题Redis分布式锁设置超时时间 Redis分布式锁主要依靠Redis服务来完成,我们的应用程序其实是Redis节点的客户端,一旦客户端没...
    99+
    2022-11-18
    Redis分布式锁 Redis设置超时时间 分布式锁设置超时时间
  • mybatis设置sql执行时间超时时间的方法
    存在这样的场景,当一些比较耗时的查询时,如果不中断,则会导致数据库堵塞,进而会拖垮整个数据库服务的正常运行。 1.如果你使用的是HikariCP连接池的话,可以在配置文件设置conn...
    99+
    2024-04-02
  • php.ini怎么设置超时时间
    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,倘若你有一个需要颇多时间才能完成的工作,...
    99+
    2021-08-07
    php.ini 超时时间
  • SpringBoot设置接口超时时间
    SpringBoot设置接口访问超时时间有两种方式一、在配置文件application.properties中加了spring.mvc.async.request-timeout=20000,意思是设置超时时间为20000ms即20s,二、...
    99+
    2015-11-02
    java教程 SpringBoot
  • php curl 设置超时
    在 PHP 中使用 cURL 函数发送请求时,我们可以通过设置超时时间来控制请求的最大时间限制,以避免长时间等待服务器响应而阻塞 PHP 脚本。 cURL 函数提供了两个选项来设置超时时间:CURLO...
    99+
    2023-09-02
    php 服务器 开发语言
  • golang http 超时设置
    Go语言是一种支持并发编程的高效编程语言,因此它在网络编程方面表现突出。HTTP协议是构建互联网应用程序的重要组成部分,Go语言中的http包也提供了大量的接口来支持HTTP请求和响应。在进行HTTP网络调用时,超时配置对于保证程序的稳定性...
    99+
    2023-05-15
  • golang在GRPC中设置client的超时时间
    超时 建立连接 主要就2函数Dail和DialContext。 // Dial creates a client connection to the given target. ...
    99+
    2024-04-02
  • Jenkins中怎么设置构建超时时间
    在Jenkins中设置构建超时时间可以通过以下步骤实现: 打开Jenkins的管理界面,在左侧导航栏中选择"系统管理&...
    99+
    2024-03-04
    Jenkins
  • Impala中如何设置查询超时时间
    在Impala中,可以通过设置查询的超时时间来控制查询的执行时间。可以使用SET语句来设置查询的超时时间,如下所示: SET QUE...
    99+
    2024-03-07
    Impala
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作