是否有可能获得在 spring 启动时动态关闭我的应用程序的服务列表
Is it possible to get a list of service that dynamically get down on my application that is on spring boot
我的应用程序包含 rabbitmq、hazelcast、dynamodb、elastic 我想建立一个机制,可以在我的任何应用程序出现故障时告诉我我应该在 email.Can 上收到通知我们包括我可以跟踪的任何服务获取我的 spring 启动应用程序
中集成的所有应用程序的状态
我尝试使用 try catch 块,但代码行增加了,这让我的代码变得非常麻烦,因为我很难在每个方法中添加 try catch
Spring Boot actuator 提供了很多有用的端点,其中之一就是健康端点。健康端点 returns 基于其依赖项(数据库、第三方 API 等)的应用程序的健康状态。
已经有内置的health indicators for RabbitMQ, Hazelcast and Elastic. There is no builtin health indicator for DynamoDB as far as I know, but you can also write your own health indicator, as seen in 。
现在,要向您发送电子邮件,有两种选择:
- 您可以使用外部程序(例如监控软件)定期检查健康执行器
- 您可以将其作为 Spring 启动应用程序的一部分编写
使用外部程序
如果您使用外部程序,您可以让它使用 /actuator/health
端点。要启用此端点,请配置以下 属性:
management.endpoints.web.exposure.include=health
默认情况下,此端点仅公开所有健康指标组合的单一聚合状态。如果您想单独查看哪个服务已关闭,可以通过将以下 属性 设置为 always
或 when_authorized
:
来显示更多详细信息
management.endpoint.health.show-details=always | when_authorized
响应将如下所示:
{
"status": "DOWN",
"rabbit": {
"status": "DOWN",
"error": "org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)"
}
}
写你自己的
你可以写一个scheduled task by using the @Scheduled
annotation to regularly check the health status. To obtain the health status, you can autowire HealthEndpoint
as seen in .
然后您可以发送一封电子邮件 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);
}
}
一旦任何健康指标下降(不仅来自您提到的服务),上面的代码片段将发送 e-mail。
要获取您感兴趣的其中一项服务的运行状况,您可以使用 healthEndpoint.healthForPath("rabbit").getStatus()
。
我的应用程序包含 rabbitmq、hazelcast、dynamodb、elastic 我想建立一个机制,可以在我的任何应用程序出现故障时告诉我我应该在 email.Can 上收到通知我们包括我可以跟踪的任何服务获取我的 spring 启动应用程序
中集成的所有应用程序的状态我尝试使用 try catch 块,但代码行增加了,这让我的代码变得非常麻烦,因为我很难在每个方法中添加 try catch
Spring Boot actuator 提供了很多有用的端点,其中之一就是健康端点。健康端点 returns 基于其依赖项(数据库、第三方 API 等)的应用程序的健康状态。
已经有内置的health indicators for RabbitMQ, Hazelcast and Elastic. There is no builtin health indicator for DynamoDB as far as I know, but you can also write your own health indicator, as seen in
现在,要向您发送电子邮件,有两种选择:
- 您可以使用外部程序(例如监控软件)定期检查健康执行器
- 您可以将其作为 Spring 启动应用程序的一部分编写
使用外部程序
如果您使用外部程序,您可以让它使用 /actuator/health
端点。要启用此端点,请配置以下 属性:
management.endpoints.web.exposure.include=health
默认情况下,此端点仅公开所有健康指标组合的单一聚合状态。如果您想单独查看哪个服务已关闭,可以通过将以下 属性 设置为 always
或 when_authorized
:
management.endpoint.health.show-details=always | when_authorized
响应将如下所示:
{
"status": "DOWN",
"rabbit": {
"status": "DOWN",
"error": "org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)"
}
}
写你自己的
你可以写一个scheduled task by using the @Scheduled
annotation to regularly check the health status. To obtain the health status, you can autowire HealthEndpoint
as seen in
然后您可以发送一封电子邮件 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);
}
}
一旦任何健康指标下降(不仅来自您提到的服务),上面的代码片段将发送 e-mail。
要获取您感兴趣的其中一项服务的运行状况,您可以使用 healthEndpoint.healthForPath("rabbit").getStatus()
。