【问题标题】:How to override Spring Boot health response codes如何覆盖 Spring Boot 健康响应代码
【发布时间】:2018-07-28 18:22:32
【问题描述】:

如何根据执行器的状态覆盖执行器的默认/健康响应状态代码:DOWN、UP、UNKNOWN so so?例如,如果健康状态为“UP”,则响应代码应为 200。如果 DOWN:400,未知 300。有什么办法可以实现吗?

注意:我不想要自己的健康端点。相反,需要覆盖现有的。

【问题讨论】:

  • 您确定这是个好主意吗?从/health 得到 200 并不意味着服务是健康的,它只是意味着健康检查成功完成。对于响应的消费者来说,为了了解服务的健康状况(或其他方面),偷看它是标准做法。
  • 如果你真的必须以 HTTP 状态码的形式传达服务的健康状况...400 表示BAD_REQUEST,那么“DOWN”(表示某物的状态)真的有意义吗?在 server) 中被视为“错误的客户端请求”? 300 在重定向分组中,这真的对应于“未知”吗?您如何表示健康检查本身的失败?换一种说法;在 UP/DOWN/UNKNOWN 和 HTTP 状态代码之间没有明确的、易于理解的映射,这是 /health 端点返回 200 并在其有效负载中提供详细信息的原因之一。
  • @glytching 。感谢您的回答。但是上面我的代码只是为了举例。可能是响应代码可以存在于 2XX 范围内。
  • 我必须坚持使用响应代码的原因是我的应用程序要与另一个工具连接,并且它会 ping /health 端点。该工具将继续处理我的应用提供的响应代码。
  • @glytching 默认情况下一个 200 响应意味着该服务不知道是不健康的。如果已知它已关闭,它将返回 503。

标签: java spring-boot spring-boot-actuator


【解决方案1】:

在 Spring boot 2.x 中,这些是内置状态及其默认值,您可以将其覆盖为所需的相关代码。

management.endpoint.health.status.http-mapping.UP=200
management.endpoint.health.status.http-mapping.UNKNOWN=200
management.endpoint.health.status.http-mapping.DOWN=503
management.endpoint.health.status.http-mapping.OUT_OF_SERVICE=503

或自定义映射

management.endpoint.health.status.http-mapping.DOWN=400

或在 yaml 中,

management: 
   endpoint:
       health:
          status:
            http-mapping:
              UP: 200
              UNKNOWN: 200
              DOWN: 503
              OUT_OF_SERVICE: 503

在 Spring boot 1.x 中,这些是应用了自定义状态的属性,

endpoints.health.mapping.DOWN=400
endpoints.health.mapping.UP=200
endpoints.health.mapping.UNKNOWN=300

或在 yaml 中,

endpoints:
   health:
      mapping:
         UP: 200
         DOWN: 400
         UNKNOWN: 300

Spring Boot Current Actuator Health Documentation

【讨论】:

    【解决方案2】:

    通过application properties 配置状态码。这些是默认值:

    management.health.status.http-mapping:
      UP: 200
      DOWN: 503
      OUT_OF_SERVICE: 503
      UNKNOWN: 200
    

    对于Spring Boot 1.x,属性改为endpoints.health.mapping

    使用您建议的代码是个坏主意,因为它们已经意味着其他东西。如果您希望上游系统以与UP 不同的方式对待它,一个合理的更改是设置UNKNOWN: 500

    【讨论】:

      【解决方案3】:

      the documentation 似乎又更新了(第二次)。健康检查状态映射的当前属性是:

      management.health.status.http-mapping.DOWN=503
      management.health.status.http-mapping.UP=200
      

      【讨论】:

      【解决方案4】:

      默认情况下,OUT_OF_SERVICEDOWN 映射到 503。任何未映射的健康状态,包括 UP,都映射到 200。

      这些值可以被覆盖,如其他答案中所述。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-06
        • 2015-08-30
        相关资源
        最近更新 更多