在Spring-启动应用程序中配置打开端口的时间

Configure timing of opening ports in Spring-Boot application

问题: 当 spring 准备好处理流量时,spring 或其嵌入式 servlet 容器中是否有打开端口的选项?

情况: 在当前设置中,我在 google 云 运行.

中使用 spring 引导应用程序 运行ning

情况:

问题: 流向未就绪应用程序的流量将导致大量 http 429 状态代码。

这影响:

我的愿望:

  1. 配置 spring/servlet 容器以在应用程序实际准备就绪时延迟打开端口 将打开端口延迟到应用程序准备就绪的时间将减轻很多痛苦,而不会过多干扰现有代码库。

  2. 有没有不会造成太大痛苦的替代方法?

  3. 我发现并认为不可行的东西

    • 使用 native-image 不是一个选项,因为它被认为是实验性的,并且在编译时消耗的 RAM 比我们的部署管道代理允许分配的更多(最大 8GB 与需要的 13GB)

    • 我找到的另一个答案: 我看不出它如何满足我的需求,因为 spring-boot 启动时间仍然很慢。这就是为什么我最初的想法是延迟开放端口


我没有时间测试以下内容,但我偶然发现的一件事是

您很清楚“Cloud 运行 目前没有 readiness/liveness 检查来避免向未就绪的应用程序发送请求”这一事实在 Cloud 运行 端完成,除了:

  • 按照文档尝试 optimise the Spring boot app
  • 在 Cloud 运行 服务中创建一个更重的入口点来处理 更多设置任务。这个 提到“A “较重”的入口点将有助于 post-部署响应能力,在 较慢的冷启动成本”(这是最相关的解决方案 从云 运行 的角度并正确概述了问题)
  • Run multiple processes in a container 在云端 运行 和你一样 提到。

这个问题似乎更针对 Spring Boot,我发现 article 有类似的要求。 但是,如果您绝对需要在收到请求时准备好应用程序,我们还有另一种云替代方案 运行、Google Kubernetes Engine (GKE) which makes use of readiness/liveness probes.