Vetx 应用程序中的正常关闭

问题描述

缩小 Kubernetes pod 并不能优雅地关闭 Vertx 应用程序(用 Java 开发)。它基本上杀死了容器。

覆盖 io.vertx.core.Launcher 类的 beforeStoppingVertx 和 afterStoppingVertx 方法并打印一些日志以验证 Vertx 是否正常关闭。 当 pod 缩小时,beforeStoppingVertx 和 afterStoppingVertx 方法永远不会被调用。

  @Override
  public void beforeStoppingVertx(Vertx vertx) {
    LOG.info("Vertx Closing Gracefully");
    vertx.close();
  }

  @Override
  public void afterStoppingVertx() {
    LOG.info("Vertx Closed Gracefully");
  }

尝试将 60 秒的宽限期添加到部署 yml 中,这是通用模板,但仍然没有用(即使在 60 秒后也未调用 beforeStoppingVertx 和 afterStoppingVertx 方法)

我怀疑 vert.x 永远不会被告知关闭。或者它没有收到消息。 我们确实可以选择在 Kubernetes 中定义 Pre Stop 钩子, https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination

问题是实际脚本是什么,我们需要作为 Pre-stop 钩子的一部分提及,它会指示 Vert.x 正常关闭?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)