使用spring-boot-admin通过HTTP监视非spring-boot应用程序

时间:2019-09-12 08:23:17

标签: spring spring-boot-admin

我有一个用“纯” Spring(Spring 4,没有Spring Boot)编写的应用程序。我想与Spring Boot Admin中的其他应用程序一起监视它。可能吗?我该怎么办?

仅检查健康状况对我来说已经足够。

1 个答案:

答案 0 :(得分:0)

我花了一些时间在Wireshark和“反向工程” SBA通信中。我发现需要做两件事:

1)将嵌入式Tomcat添加到模块并像这样设置RestController

@RestController
@RequestMapping(value = "/")
public class HealthRestController {

    @RequestMapping(path = "health", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity health() {
        final String body = "{\"status\": \"UP\"}";
        final MultiValueMap<String, String> headers = new HttpHeaders();
        headers.set(HttpHeaders.CONTENT_TYPE, "application/vnd.spring-boot.actuator.v1+json;charset=UTF-8");
        return new ResponseEntity<>(body, headers, HttpStatus.OK);
    }
}

由于某种原因,我无法在Spring 9.0上使用最新的(4.3.16)Tomcat,因此我使用了8.5.45

pom.xml dependencies:spring-webmvc,spring-core,javax.servlet-api(提供),tomcat-embed-core,tomcat-embed-jasper,jackson-databind。

2)每10秒将“心跳”发布到SBA。我是用计划的方法创建新bean的:

@Component
public class HeartbeatScheduledController {

    private static final String APPLICATION_URL = "http://myapp.example.com:8080/";
    private static final String HEALTH_URL = APPLICATION_URL + "health";
    private static final String SBA_URL = "http://sba.example.com/instances";

    @Scheduled(fixedRate = 10_000)
    public void postStatusToSBA() {
        StatusDTO statusDTO = new StatusDTO("MyModuleName", APPLICATION_URL, HEALTH_URL, APPLICATION_URL);
        final RestTemplate restTemplate = new RestTemplate();
        final HttpHeaders headers = new HttpHeaders();
        headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<Object> entity = new HttpEntity<>(statusDTO, headers);
        ResponseEntity<String> response = restTemplate.exchange(SBA_URL, HttpMethod.POST, entity, String.class);
    }

    public static class StatusDTO {
        private String name;
        private String managementUrl;
        private String healthUrl;
        private String serviceUrl;
        private Map<String, String> metadata;
    }
}

StatusDTO是对象转换为JSON的对象,每10秒发送到SBA。

这两个步骤足以使我的模块在SBA上呈绿色-仅考虑健康。添加对所有其他SBA功能的支持是没有意义的-与尝试重新实现SBA相比,添加Spring Boot并启用实际SBA更好。