专栏首页服务化进程springcloud线上发布超时之grpc

springcloud线上发布超时之grpc

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

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

springcloud线上发布超时之grpc

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

问题分析

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

解决方案

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

@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分钟,这里的一分钟也是由于其他资源没初始化导致。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • grpc断路器之hystrix

    但是由于公司线上系统用的告警与监控组件是prometheus,而sentinel暂时还没有集成prometheus,所以这里就在部分线上系统还是用hystrix

    一笠风雨任生平
  • quartz执行卡死--强制中断线程

    在quartz中经常会碰到由于网络问题或者一些其他不稳定因素导致的线程卡死问题,这往往会导致数据处理的延时。而有时候一时无法定位到卡死的原因,为了降低系统风险,...

    一笠风雨任生平
  • spring同时集成mybatis和ibatis

    最近来了一个新项目,说是新的项目,但是需要用到以前旧的模块代码,旧的模块使用架构为ssi

    一笠风雨任生平
  • rapidjson常见使用示例

    rapidjson相比jsoncpp性能高出太多,使用接口一样的简单的。官方中文帮助文档:http://rapidjson.org/zh-cn/。

    一见
  • jarvisoj-Crypto

    jarvisoj-Crypto Medium RSA 题目到手后给了一个公钥和一个密文 ? ? 我们对这个公钥提取信息: ? 可以得到 N = 0xC2636A...

    安恒网络空间安全讲武堂
  • rapidjson常见使用示例

    Document d; v2.CopyFrom(d, a); // 把整个document复制至v2,d不变 rapidjson为了最大...

    一见
  • 在python下比celery更加简单的

    http://xiaorui.cc/2014/11/09/%E5%9F%BA%E4%BA%8Eredis%E5%8F%88%E6%AF%94celery%E6%...

    py3study
  • FckEditor 2.6.4升级手记

    说是升级,其实就是把原来的版本替换掉 1.先到www.fckeditor.net上下载fckeditor(html/js包)和fckeditor.net(专用...

    菩提树下的杨过
  • Vue如何实现导出页面为PDF

    导入完成之后,开始编写需要进行操作的Vue页面,如下,当然其中页面只是为了参考,读者可以通过自己编写的页面来进行测试

    初学者123
  • CentOS 6 启动流程详细介绍

    按下电源键首先要检测硬件设备是否能正常运行,如:cpu、内存、硬盘等硬件设备。当然POST不是由硬件去检测(硬件也不会啊!),而是依靠一个软件来完成的,这个软件...

    砸漏

扫码关注云+社区

领取腾讯云代金券