前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springcloud线上发布超时之grpc

springcloud线上发布超时之grpc

作者头像
一笠风雨任生平
发布2020-04-24 10:25:23
8930
发布2020-04-24 10:25:23
举报
文章被收录于专栏:服务化进程服务化进程

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

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

springcloud线上发布超时之grpc

上一章我们说到了 springcloud线上发布超时之feign(ribbon饥饿加载) 在本章我们说说grpc的饥饿加载,grpc连接也是一样的问题,发布后,如果超时时间设置的比较短,第一次请求一般会报超时,当高并发情况下发布系统时,会出现一段时间的超时。

问题分析

问题原因与上一章描述的差不多,就是容器初始化后grpc连接没有初始化,在第一次调用时才会去初始化连接以及相关拦截器等上下文,而grpc暂时没有饥饿加载相关的配置,下面描述下解决方案

解决方案

这里采用的方案,是在容器初始化好后手动调用下grpc请求,这样就会在承载流量前会初始化好相关资源,减少出错数。 代码如下:

代码语言:javascript
复制
@Slf4j
@Service
public class GrpcService {
    @GrpcClient("grpc-server")
    private Channel serverChannel;
    @Value("${grpc.timeout:1000}")
    private int grpcTimeout;

    @Autowired
    private RecommendMetrics recommendMetrics;
    @PostConstruct
    private void firstGrpcGet() {
        try {
            log.warn("GrpcService.firstGrpcGet start");
            HelloApi.HelloRequest.Builder requestBuilder = HelloApi.HelloRequest.newBuilder();
            HelloApi.HelloRequest request = requestBuilder.build();
            HelloerGrpc.HelloerBlockingStub stub = HelloerGrpc.newBlockingStub(serverChannel);
            stub.withDeadlineAfter(grpcTimeout, TimeUnit.MILLISECONDS).doHello(request);
            log.warn("GrpcService.firstGrpcGet end");
        }catch (Exception e){
            log.error("GrpcService.firstGrpcGet error"+e.getMessage());
        }

    }

上面介绍的是一种方案,当然还有其他方法,加上手动饥饿加载后,超时fallback持续5分钟缩短为1分钟,这里的一分钟也是由于其他资源没初始化导致。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题分析
  • 解决方案
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档