spring boot-如何检查特定应用程序url的状态200

xjreopfe  于 2021-07-16  发布在  Java
关注(0)|答案(1)|浏览(400)

我在spring boot admin下监控了几个应用程序。springbootadmin很擅长告诉我应用程序是启动还是关闭,以及其他各种指标。
我还想知道这些应用程序公开的某些URL返回的http状态是200。具体来说,我想每天发送一次get请求到这些URL。如果它从其中任何一个接收到非200状态,它将发送一封电子邮件,说明哪些url报告的是非200。
springboot管理员能做些什么?我知道风俗 HealthIndicator 但不确定是否可以安排或者是否适合这样做。
我只是想看看是否有一些SpringBootAdmin提供的支持,在我构建自己的应用程序进行get调用和发送电子邮件之前。
更新
这些URL被公开为eureka服务,我通过springcloudopenfeign调用其他服务。
更新2
我继续构建了自己的自定义应用程序来处理这个问题。细节如下,但仍然感兴趣,如果Spring提供一些现成的东西来做这件事。
应用程序.yml

app:
  serviceUrls: 
    - "http://car-service/cars?category=sedan"
    - "http://truck-service/trucks"
cron: "0 0 10 * * *"

URL读入:

@Component
@ConfigurationProperties(prefix = "app")
@Getter
@Setter
public class ServiceUrls {
    private String[] serviceUrls;
}

通过cron,计划每天运行一次:

@Component
@RequiredArgsConstructor
@Slf4j
public class ServiceCheckRunner {

    private final ServiceHealth serviceHealth;

    @Scheduled(cron = "${cron}")
    public void runCheck() {
        serviceHealth.check();
    }
}

这是检查URL是否不返回错误的代码:

@Service
@RequiredArgsConstructor
@Slf4j
public class ServiceHealth {

    private final ServiceUrls serviceUrls;
    private final RestTemplate rest;

    public void check() {

        List<String> failedServiceUrls = new ArrayList<>();
        for (String serviceUrl : serviceUrls.getServiceUrls()) {
            try {

                ResponseEntity<String> response = rest.getForEntity(serviceUrl, String.class);

                if (!response.getStatusCode().is2xxSuccessful()) {
                    failedServiceUrls.add(serviceUrl);
                }

            } catch (Exception e){
                failedServiceUrls.add(serviceUrl);
            }

        }

        // code to send an email with failedServiceUrls.
    }   
}
cnwbcb6i

cnwbcb6i1#

您可以使用springbootadmin,以便在注册的客户机将其状态从up更改为offline或其他时发送电子邮件通知。
pom.xml文件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.4.0</version>
</dependency>

应用程序属性

spring.mail.host=smtp.example.com
spring.mail.username=smtp_user
spring.mail.password=smtp_password
spring.boot.admin.notify.mail.to=admin@example.com

但是,如果您真的需要每天检查一次客户机状态,那么您需要实现一个定制的解决方案。

相关问题