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

Easter79 等级 177 0 0

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();
    }

}
收藏
评论区

相关推荐

[C#]ArrayList、string、string[]之间的转换
1、ArrarList 转换为 string\[\] :  ArrayList list new ArrayList();  list.Add("aaa");  list.Add("bbb");  string\[\] arrString (string\[\])list.ToArray(typeof( string)) ;2、string\[\] 转换
JAVA跨域、RestTemplate高并发下异常与配置、JSON数据Long转String
\## 跨域支持 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; imp
java常见的 http 请求库比较
java常见的http请求库有httpclient,RestTemplate,OKhttp,更高层次封装的 feign、retrofit ##1、HttpClient HttpClient:代码复杂,还得操心资源回收等。代码很复杂,冗余代码多,不建议直接使用。 ##2、RestTemplate RestTemplate: 是 Spring 提供的用于访问
Nacos(三):Nacos与OpenFeign的对接使用
前言 == 上篇文章中,简单介绍了`如何在SpringCloud项目中接入Nacos作为注册中心`,其中服务消费者是通过RestTemplate+Ribbon的方式来进行服务调用的。 实际上在日常项目中服务间调用大都用的是`OpenFeign`, OpenFeign自身整合了Ribbon和Hystrix,为服务调用提供了更优雅的方式 那么接入了Naco
OAuth2RestTemplate的例子
@RestController public class RoutesController { @Autowired private OAuth2RestTemplate restTemplate; @RequestMapping(value = "/routes") @Qualifier("userInfoRestTemp
RestTemplate使用
自定义Http Header和HttpBody ----------------------- ### GET请求 构造HttpHeaders对象,主要是安全验证 HttpHeaders headers = new HttpHeaders(); headers.add("Date", auth.get(0)); headers.
SpringCloud单元测试【六】
SpringCloud的单元测试主要是依靠 Mock以及Mockito, 所以我们需要对Mock以及Mockito有一定的认识。 ### 一、为什么要用MockMvc   可能我们在测试控制层的代码都是启动服务器,在浏览器中输入URL,然后开始测试是否达到预期效果,发生错误的话,修改相关代码并重启服务器再次进行测试。分析一下这个过程,启动服务器-->打开
SpringCloud基础第一部分
今日内容 ---- * 系统架构演变 * 服务调用方式 * Spring的RestTemplate * SpringCloud * Eureka * Ribbon * Hystrix 第一章 系统架构演变 ---------- 随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此也不断的
SpringCloud整体构架设计
SpringClound整体核心架构只有一点:Rest服务,也就是说在整个SpringCloud配置过程之中,所有的配置处理都是围绕着Rest完成的,在这个Rest处理之中,一定要有两个端:服务的提供者(Provider)、服务的消费者(Consumer),所以对于整个SpringCloud基础的结构就如下所示: ![](https://oscimg.os
SpringCloud系列教材 (一)
SpringCloud系列教材 (一)- 介绍 ======================= * * * 步骤1:先讲单体架构系统 步骤2:分布式和集群 步骤3:SpringCloud 步骤 1 : 先讲单体架构系统 在讲解Springcloud 之前,我们先讲一讲单体架构系统。 所谓的单体架构就是所有功能,都放在一个应用里。 比如后面
Springmvc的RestTemplate
import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; i
springCloud集成zookeper
最近梳理springboot相关知识。看到分布式锁,其中有一种是使用zookeeper实现的,就学习一下zookeeper。本来是使用springboot和zookeeper集成的,但是试了半天,好像不行。pom文件一直冲突。无奈,参考  https://start.spring.io/ ,生成了一个小的demo,发现该demo是使用springcloud,
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)
springcloud线上发布超时方案之终极杀招:预热(测试用例)
springcloud线上发布超时系列文章: [springcloud线上发布超时之feign(ribbon饥饿加载)](https://my.oschina.net/u/560547/blog/3275636) [springcloud线上发布超时之grpc](https://my.oschina.net/u/560547/blog/3275637)
springcloud费话之配置中心server修改
目录: [springcloud费话之Eureka基础](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.cnblogs.com%2FliuyuhangCastle%2Fp%2F11397227.html) [springcloud费话之Eureka集群](https://www