文档章节

spring cloud 里的 超时问题

p
 pigpig2008
发布于 2017/04/07 10:21
字数 394
阅读 75
收藏 0
点赞 0
评论 0

hystrix默认超时时间是1000,单位:ms

服务提供方:

package cc.sion.web;

import cc.sion.biz.ISayBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.*;

import java.util.concurrent.TimeUnit;

@RestController
public class SayController {
    @RequestMapping(value = "/sayWaiting/{name}" ,method = RequestMethod.GET)
    public String sayWaiting(@PathVariable String name) {
        try {
            //等5秒
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        return "I hate waiting in line.";
    }

}

服务消费者:

@Service
public class RemoteService {

    @Autowired
    RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "sayFallback")
    public String sayWaiting(String name) {
        return restTemplate.getForObject(hello_url+"/sayWaiting/"+name, String.class);
    }

    public String sayFallback(String name,Throwable e)
    {

        System.out.println("=======================");
        if(e!=null)
            e.printStackTrace();

        return ":(";
    }
}

运行时提示:

=======================
com.netflix.hystrix.exception.HystrixTimeoutException
	at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$1.run(AbstractCommand.java:1121)
	at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable$1.call(HystrixContextRunnable.java:41)
	at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable$1.call(HystrixContextRunnable.java:37)
	at com.netflix.hystrix.strategy.concurrency.HystrixContextRunnable.run(HystrixContextRunnable.java:57)
	at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$2.tick(AbstractCommand.java:1138)
	at com.netflix.hystrix.util.HystrixTimer$1.run(HystrixTimer.java:99)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

解决办法如下:

一,修复消费者代码,添加个配置

    @HystrixCommand(fallbackMethod = "sayFallback",
            commandProperties = {
                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "6000")
            }
    )
    public String sayWaiting(String name) {
        return restTemplate.getForObject(hello_url+"/sayWaiting/"+name, String.class);
    }

二,在application.yml下改hystrix配置

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds:  6000

或者直接禁用掉超时设置:

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled:  false

 

还一个就是restTemplate的超时,比如这个:

org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://ooxx/addNumber": Read timed out; nested exception is java.net.SocketTimeoutException: Read timed out
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:633) ~[spring-web-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:580) ~[spring-web-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]
        at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:380) ~[spring-web-4.3.2.RELEASE.jar!/:4.3.2.RELEASE]
        at org.springframework.web.client.RestTemplate$$FastClassBySpringCGLIB$$aa4e9ed0.invoke(<generated>) ~[

直接换个restTemplate的构造方式:

    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        //By default RestTemplate uses SimpleClientHttpRequestFactory which depends on default configuration of HttpURLConnection.
        //If you want to use HttpComponentsClientHttpRequestFactory - it has a connection pooling configuration which SimpleClientHttpRequestFactory does not have.

//毫秒
//        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
//        requestFactory.setConnectTimeout(60000);
//        requestFactory.setReadTimeout(10000);

        HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
        requestFactory.setConnectionRequestTimeout(5000);
        requestFactory.setConnectTimeout(5000);
        requestFactory.setReadTimeout(60000);

        return new RestTemplate(requestFactory);
    }

 

© 著作权归作者所有

共有 人打赏支持
p
粉丝 1
博文 21
码字总数 13506
作品 0
九龙坡
Hystrix介绍以及服务的降级限流熔断

介绍 首先在这里给粉丝道个歉,由于这一段时间比较忙,没有更新大数据,因为项目上用到了Spring cloud,所以在以后的日子里,会将Spring cloud纳入更新的范畴,好了,言归正传。 据我了解,现...

ROCK_杰哥
07/07
0
0
微服务开发架构——Spring Cloud常见问题与总结Hystrix/Feign 整合Hystrix后首次请求失败

个人GitHub地址:https://github.com/leebingbin/ 在使用Spring Cloud的过程中,难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。 关于“Eureka常见问题”可以参考,我之前的文...

Mr_ET
2017/10/30
0
0
Spring Cloud: 使用kill命令优雅关闭微服务, 解决退出时Eureka取消注册操作耗时过长的坑

关于Spring Cloud服务优雅关闭的方案有很多种了,这里介绍一下使用命令优雅关闭的方案,并解决会出现的问题。 所谓的优雅指两方面,一是程序在退出时要主动向Eureka取消注册自己,二是完成资...

司青玄
05/23
0
0
Spring Boot 工具 Spring Cloud Skipper 1.0.5 发布

Spring Cloud Skipper 1.0.5 已发布,Skipper 是一款轻量级工具,你可以通过它发现 Spring Boot 应用程序,并在多个云平台上管理其生命周期。你也可以独立使用 Skipper 或将其与持续集成管道...

局长
06/07
0
0
Spring Retry重试机制

在调用第三方接口或者使用mq时,会出现网络抖动,连接超时等网络异常,所以需要重试。为了使处理更加健壮并且不太容易出现故障,后续的尝试操作,有时候会帮助失败的操作最后执行成功。例如,...

aoho
05/09
0
0
spring cloud gateway集成hystrix实战

序 本文主要研究一下spring cloud gateway如何集成hystrix maven 添加spring-cloud-starter-netflix-hystrix依赖,开启hystrix 配置实例 首先filter里头配置了name为Hystrix的filter,实际是...

go4it
06/10
0
0
中小企业对Spring Cloud微服务架构实践经验总结的一些思考!

相关阅读: 毕业10年,阻碍你职业发展的最大“拦路虎”到底是什么? 不能All in的人别去创业公司 互联网技术(java框架、分布式、集群)干货视频大全,不看后悔!(免费下载) 作者:张强 来源:...

互联网架构师
07/01
0
0
Spring Cloud学习:03断路器(Hystrix)

1 Hystrix介绍 Spring Cloud Hystrix是分布式系统处理超时和错误的机制,如下图所示,分布式系统中某个用户请求依赖A、H、I、P服务。 当此请求并发超过50的时候,服务I处理速度变慢,但是服务...

寒武没有纪
2017/10/22
0
0
微服务开发架构——Spring Cloud常见问题与总结Spring Cloud 定位问题思路总结

个人GitHub地址:https://github.com/leebingbin/ 在使用Spring Cloud的过程中,难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。 五、Spring Cloud 定位问题思路总结 根据市场...

Mr_ET
2017/11/02
0
0
Spring Cloud Gateway运行时动态配置网关

Spring Cloud Gateway官方教程讲的都是提前在配置文件中配置网关,实际项目中,Spring Cloud Gateway作为微服务的入口,需要尽量避免重启,所以我们需要在Spring Cloud Gateway运行时动态配置...

仝玉甫
07/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部