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

是否有可能获得一个服务列表,该列表动态关闭我的应用程序,该应用程序处于Spring启动状态

邵崇凛
2023-03-14

我的应用程序包含Rabbitmq、Hazelcast、Dynamodb、弹性我想建立一个机制,可以告诉我何时我的任何应用程序出现故障,我应该通过电子邮件得到通知。我们可以包含任何我可以跟踪的服务,以获取集成在我的Spring boot应用程序中的所有应用程序的状态吗

我尝试使用try cat块,但代码行增加了,这使我的代码非常繁琐,因为我很难在每个方法上都添加try cat

共有1个答案

楚宪
2023-03-14

Spring Boot actuator提供了许多有用的endpoint,其中之一就是健康endpoint。健康endpoint根据应用程序的依赖关系(数据库、第三方API等)返回应用程序的健康状态。

RabbitMQ、Hazelcast和Elastic已经内置了健康指标。据我所知,DynamoDB没有内置的健康指示器,但您也可以编写自己的健康指示器,如本问题所示。

现在,要向您发送电子邮件,有两种选择:

  1. 您可以使用外部程序(例如监控软件)定期检查健康执行器
  2. 您可以将其编写为Spring Boot应用程序的一部分

如果您使用外部程序,您可以让它使用/致动器/健康endpoint。要启用此endpoint,请配置以下属性:

management.endpoints.web.exposure.include=health

默认情况下,此endpoint仅公开所有健康指标组合的单个聚合状态。如果要单独查看哪个服务已关闭,可以通过将以下属性设置为“始终”或“授权时”来显示更多详细信息:

management.endpoint.health.show-details=always | when_authorized

响应如下所示:

json prettyprint-override">{
  "status": "DOWN",
  "rabbit": {
    "status": "DOWN",
    "error": "org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)"
  }
}

您可以使用scheduled注释编写计划任务,以定期检查运行状况。要获取健康状态,可以自动连线HealthEndpoint,如本问题所示。

然后您可以使用Spring发送电子邮件。

@Component
public class HealthEmailSender {
    private final HealthEndpoint healthEndpoint;
    private final JavaMailSender mailSender;

    // TODO: Implement constructor to autowire healthEndpoint + mailSender

    @Scheduled(fixedRate = 10 * 60 * 1000) // Check once every 10 minutes
    public void sendEmailWhenBadHealth() {
        if (isHealthDown()) {
            sendMail();
        }
    }
    
    private boolean isHealthDown() {
        return Status.DOWN.equals(healthEndpoint.health().getStatus());
    }

    private void sendMail() {
        MimeMessage message = mailsender.createMimeMessage();
        // TODO: Set from / to / title / content
        mailSender.send(message);
    }
}

一旦任何健康指标下降(不仅仅是您提到的服务),上面的代码片段就会发送一封电子邮件。

要获取您感兴趣的服务之一的运行状况,您可以使用健康ndpoint.healthForPath("兔子"). getState()

 类似资料:
  • 启动 1. 轻触主画面上您想启动的应用程序图标。 显示LiveArea™。 2. 轻触[开始]。 中断/继续 按下PS键即可返回LiveArea™。若要继续,请轻触[继续]。 关闭 1. 按下PS键。 返回LiveArea™。 2. 请由画面右上角将LiveArea™撕下。

  • 我正在运行一个spring启动应用程序,除了尝试关闭它之外,一切都很好。我在下面的代码中出错 该错误在最后一行生成,spring boot将在2秒等待完成之前关闭level2List,如下所示 是否有任何方法可以命令关闭过程,或确保在关闭之前我没有使用level2List? 沙布尔酒店

  • 问题内容: 假设我有一个实用程序类DateUtil(请参见下文)。若要使用此方法,调用者方法将使用DateUtils.getDateAsString(aDate)。删除static修饰符并使DateUtil成为spring bean(请参见DateUtilsBean)并将其注入到调用类中还是将其保持原样会更好吗? 春豆版本 问题答案: 我不这么认为。DateUtils类听起来像是一个纯实用程序类,

  • 我的Spring Boot应用程序不是Web服务器,但它是使用自定义协议的服务器(在本例中使用Camel)。 但是Spring Boot在启动后立即(优雅地)停止。我如何防止这种情况? 我希望应用程序停止,如果Ctrl C或编程。