当前位置: 首页 > 知识库问答 >
问题:

配置Spring Boot应用程序中打开端口的时间

后化
2023-03-14

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

情况:在当前的设置中,我使用了一个在google cloud run中运行的spring boot应用程序。

情况:

>

  • Cloud run不支持liveness/Readynes探测,它将开放端口视为“应用程序就绪”。

    Cloud run将请求发送到容器,尽管spring尚未准备好处理请求。

    Spring启动其servlet容器,打开其端口,同时仍然旋转其豆子。

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

    这会影响:

    • 新部署
    • 云运行的扩展功能

    我的愿望:

    >

  • 将spring/servlet容器配置为在应用程序实际准备就绪时延迟打开端口。将打开端口延迟到应用程序准备就绪时将减轻很多痛苦,同时不会对现有代码库造成太多干扰。

    有没有不会造成太多痛苦的替代方案?

    我发现并认为不可行的事情

    >

  • 使用本机映像不是一种选择,因为它被认为是实验性的,并且在编译时消耗的RAM比我们的部署管道代理允许分配的要多(最大8GB与所需的13GB)

    我发现的另一个答案是:谷歌云运行的准备情况检查-如何?我看不出它如何满足我的需求,因为Spring启动的启动时间仍然很慢。这就是为什么我最初的想法是推迟打开端口

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

    • 关于在容器中使用多个进程的博客文章。虽然它违背了容器原则的建议,但在云运行支持任何类型的探测器之前,它似乎是可行的。
  • 共有1个答案

    丁良骏
    2023-03-14

    您很清楚“Cloud Run目前没有就绪/活动性检查来避免向未就绪的应用程序发送请求”,我想说的是,在Cloud Run方面除了以下几点之外,没有什么可以做的:

    • 根据文档尝试并优化Spring boot应用程序
    • 在云运行服务中增加一个较重的入口点,负责更多的设置任务。这个stackoverflow线程提到“一个‘较重’的入口点将如何帮助部署后响应,而代价是较慢的冷启动”(从云运行的角度来看,这是最相关的解决方案,并正确地概述了这个问题)
    • 在云中的容器中运行多个进程,如您所述

    这个问题似乎更具体地针对Spring Boot,我发现了一篇具有类似要求的文章。然而,如果您绝对需要该应用程序在收到请求时随时可用,我们有另一种云运行的替代方案,即谷歌Kubernetes引擎(GKE),它利用就绪/活跃度探测。

     类似资料:
    • 问题内容: 我需要获取机器上所有打开的端口以及打开它们的应用程序的列表。我需要以编程方式获取此信息。 谢谢。 问题答案: 我希望能有一个更聪明的答案。我只是这样做(用Python编程),试图重写一个名为NetHogs的程序。我的版本在这里,特别是这里是Python中用于从中解析表的模块。如果您不是精通Python的人(请学习它),那么请看一下原始的NetHogs,它使用了C / C ++的混合(阅

    • 我希望我的 Quarkus 应用程序在默认端口以外的端口上运行。我怎样才能做到这一点?

    • 问题内容: 如何配置Spring Boot应用程序侦听的TCP / IP端口,因此它不使用默认端口8080。 问题答案: 正如在所述的文档任一组使用命令行选项来JVM中的系统属性-或添加在与 对于随机端口使用

    • 关于Android M上的粒度权限。 如果用户两次拒绝权限请求, 或者用户标记“不再询问”。

    • 问题内容: 如何配置Spring Boot应用程序侦听的TCP / IP端口,因此它不使用默认端口8080。 问题答案: 正如在所述的文档任一组使用命令行选项来JVM中的系统属性或添加在与 对于随机端口使用

    • 问题内容: 我在Centos6上使用JDK7运行Java程序。我使用以下选项启用JMX: 当我检查打开哪些端口时,我发现另外两个随机端口: 请注意,每个仅重新启动配置的端口9123保持不变,并且另外两个端口更改值。 还有2个附加端口,为什么要打开? 如何配置2个其他随机端口? 如何配置将在JMX打开的所有端口之前出现? 为什么与JConsole连接时不使用一个端口? 添加以澄清答案 不幸的是,附加