代码之家  ›  专栏  ›  技术社区  ›  ssc-hrep3

如何确定应用程序当前是否在Swisscom Cloud中被CloudFoundry停止?标题X-Cf-Routererror可靠吗?

  •  3
  • ssc-hrep3  · 技术社区  · 7 年前

    404 状态代码:

    404 Not Found: Requested route ('name.scapp.io') does not exist.
    

    此外,当应用程序停止时(并且只有在停止时),会出现标头:

    X-Cf-Routererror: unknown_route
    

    如果应用程序未运行,是否可靠地添加了此标头?如果是这种情况,我可以使用此标志显示维护页面。


    顺便问一下:提供一个 5xx 如果应用程序未启动/崩溃,即停止的应用程序和错误的请求路由之间存在差异,则为状态代码?抓住一个 503 错误会容易得多,因为它不会干扰我们的业务逻辑( 404 在应用程序内部使用)。

    2 回复  |  直到 7 年前
        1
  •  5
  •   Daniel Mikusa    7 年前

    另一种选择是使用通配符路由。

    https://docs.cloudfoundry.org/devguide/deploy-apps/routes-domains.html#create-an-http-route-with-wildcard-hostname

    因此,您可以将通配符路由映射到显示维护页面的静态应用程序。然后,如果映射到特定路径的应用程序关闭或不可用,则将显示维护页面,而不是404。

    关于你的问题。。。

    顺便问一下:如果应用程序没有启动/崩溃,即停止的应用程序和错误的请求路由不同,那么提供5xx状态代码不是更有意义吗?捕捉503错误会容易得多,因为它不会干扰我们的业务逻辑(404在应用程序内部使用)。

    GoRouter维护一个路由列表,用于将传入请求映射到应用程序。如果应用程序关闭,那么路由表中就没有路由,这就是为什么最终会出现404。如果你从GoRouter的角度来考虑,这是有道理的。没有路由,因此返回404 Not Found。要让503有意义,GoRouter必须了解应用程序,并知道它已关闭或没有响应。

    我想,如果您使用上面的通配符路由,您可能能够实现这种行为,但不要显示维护页面,只需让它返回HTTP 503即可。

    希望这有帮助!

        2
  •  1
  •   Lafunamor    7 年前

    您看到的404错误是由CloudFoundrys路由层生成的,并在上游进行维护。

    通常,如果您不想收到此类错误消息,可以使用蓝绿色部署。以下是CF文档中对其的详细描述: https://docs.cloudfoundry.org/devguide/deploy-apps/blue-green.html

    另一种选择是添加为您实现此功能的路由服务。请查看CF文档: https://docs.cloudfoundry.org/services/route-services.html