springcloud线上发布超时方案之终极杀招:预热(测试用例)

Easter79
• 阅读 787

springcloud线上发布超时系列文章:

springcloud线上发布超时之feign(ribbon饥饿加载)

springcloud线上发布超时之grpc

springcloud线上发布超时方案之终极杀招:预热(测试用例)

前言

经过上面两章的优化,超时报错有所减少,但是只是得到了缓解但是当流量切换时还是会有大量超时。

方案

这里又增加了一个启动后预热,即在程序启动后执行测试用例n次,让hystrix、web容器线程池等资源初始化。在测试用例执行完成之前,为了保证服务不对外提供服务,这里可以分两种。

延迟注册到注册中心

如果时使用注册中心来进行服务发现等,这里可以采用延迟注册来保证测试用例的成功执行, 如果时eureka为注册中心可以配置initial-instance-info-replication-interval-seconds参数,默认是40s,可以将其改为1分钟

如果是consul或者zk,可以修改响应的延时注册时间,或者修改服务端有效时间

kubernetes中增加服务ready延时时间

这里再deploy.yml中配置如下:

spec:
  replicas: 1
  template:
    spec:
      containers:
      - args:
        livenessProbe:
          failureThreshold: 5
          httpGet:
            path: /health
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 60  //延迟时间s

案例

这里测试用例不建议使用spring的 @PostConstruct注解,最好是等web容器启动就绪后再执行测试用例,这里给一个我的demo

@Slf4j
public class WebContextInit {

    private RestTemplate restTemplate = new RestTemplate();
    private static WebContextInit webContextInit = new WebContextInit();
    private WebContextInit(){}
    public static WebContextInit getInstance() {
        return webContextInit;
    }

    public void init() {
        if (isTestEnabled()) {
            for(int i=0;i<10;i++){
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    String url = "http://localhost:8080/srch-recommend-plt/re-sort";
                    log.warn("WebContextInit.testResort start");
                    String body = "xxxbody";
                    HttpHeaders headers = new HttpHeaders();
                    headers.add("Content-Type", "application/json");
                    HttpEntity<string> entity = new HttpEntity&lt;&gt;(body, headers);
                    for (int i = 0; i &lt; appConfig.getTestCount(); i++) {
                        try {
                            restTemplate.postForObject(url, entity, String.class);
                        } catch (Exception e) {
                            log.error("WebContextInit.testDemo error" + e.getMessage());
                        }
                    }
                    log.warn("WebContextInit.testDemo  end");
                }
            });
            thread.start();
        }
        }

    }

然后在启动类中初始化:

public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        WebContextInit.getInstance().init();
    }

}
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
springcloud线上发布超时之feign(ribbon饥饿加载)
springcloud线上发布超时系列文章:springcloud线上发布超时之feign(ribbon饥饿加载)(https://my.oschina.net/u/560547/blog/3275636)springcloud线上发布超时之grpc(https://my.oschina.net/u/560547/blog/3275637)
Wesley13 Wesley13
2年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Stella981 Stella981
2年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Easter79 Easter79
2年前
TiDB 的现在和未来
本文根据黄东旭在PingCAPD轮融资线上发布会的演讲实录进行整理。!(https://oscimg.oschina.net/oscnet/upceee1b1ad10e2bcde45dbe1cc00dc0688fc.png)TiDB的现在和未来大家好,我是黄东旭,是PingCAP的联合创始人和CTO
Stella981 Stella981
2年前
From表单提交的几种方式
<body<formaction"https://my.oschina.net/u/3285916"method"get"name"formOne"id"formId"name:<inputtype"text"name"name"pwd:<inputtyp
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
京东云开发者 京东云开发者
5个月前
线上SQL超时场景分析-MySQL超时之间隙锁 | 京东物流技术团队
前言之前遇到过一个由MySQL间隙锁引发线上sql执行超时的场景,记录一下。背景说明分布式事务消息表:业务上使用消息表的方式,依赖本地事务,实现了一套分布式事务方案消息表名:mqmessages数据量:3000多万索引:createtime和statuss
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k