SpringBoot AdminЕго можно рассматривать как интерфейс пользовательского интерфейса для мониторинга конечной точки привода Spring, который может легко просматривать текущее состояние службы.
Некоторые сервисы не в сети
Как показано на рисунке выше, после того, как проект интегрирует некоторые компоненты, статус показывает, что он не в сети, но приложение по-прежнему может нормально предоставлять услуги внешнему миру.
- Мы знаем, что онлайн-статус, отображаемый приложением, прочитан
Spring actuator health endpoint数据
curl http://127.0.0.1:5002/actuator/health
{"status":"DOWN"}
- не могу пройти в это время
SpringBoot AdminНевозможно получить дополнительные сведения, рекомендуется, чтобы среда разработки включила сведения о конечной точке.
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always #dev open
- Попробуйте еще раз зайти, выведите состояние всех компонентов, хорошо видно, что из-за
sentinelСостояние неправильное, а глобальное состояниеdown
curl http://127.0.0.1:5002/actuator/health
{"status":"DOWN","components":{"discoveryComposite":{"status":"UP","components":{"discoveryClient":{"status":"UP","details":{"services":["pigx-upms-biz","pigx-tx-manager","pigx-daemon-elastic-job","pigx-mp-platform","pigx-daemon-quartz","pigx-gateway","pigx-auth","pigx-pay-platform","pigx-codegen","pigx-oa-platform","pigx-monitor"]}}}},"diskSpace":{"status":"UP","details":{"total":42927636480,"free":21334122496,"threshold":10485760}},"nacosConfig":{"status":"UP"},"nacosDiscovery":{"status":"UP"},"ping":{"status":"UP"},"reactiveDiscoveryClients":{"status":"UP","components":{"Simple Reactive Discovery Client":{"status":"UP","details":{"services":[]}}}},"redis":{"status":"UP","details":{"version":"5.0.7"}},"refreshScope":{"status":"UP"},"sentinel":{"status":"DOWN","details":{"dataSource":{},"enabled":true,"dashboard":{"description":"pigx-sentinel:5020 can't be connected","status":"DOWN"}}}}}
sentinel dashboadr can't be connected
- SentinelHealthIndicator.doHealthCheck Давайте посмотрим, как обрабатывается проверка работоспособности Sentinel.
protected void doHealthCheck(Health.Builder builder) throws Exception {
Map<String, Object> detailMap = new HashMap<>();
// 获取心跳发送器
HeartbeatSender heartbeatSender = HeartbeatSenderProvider
.getHeartbeatSender();
// 发送心跳
boolean result = heartbeatSender.sendHeartbeat();
if (result) {
// 成功标记为UP
detailMap.put("dashboard", Status.UP);
}
else {
// 失败 标记为down
dashboardUp = false;
detailMap.put("dashboard", new Status(Status.DOWN.getCode(),
consoleServer + " can't be connected"));
}
}
// If Dashboard and DataSource are both OK, the health status is UP
if (dashboardUp && dataSourceUp) {
builder.up().withDetails(detailMap);
}
else {
builder.down().withDetails(detailMap);
}
}
- SimpleHttpHeartbeatSender.sendHeartbeat Логика обработки отправителя пульса
public boolean sendHeartbeat() throws Exception {
// 1. 判断客户端是和服务端是否交互 ,只有交互时dashboard 才有数据展示
if (TransportConfig.getRuntimePort() <= 0) {
RecordLog.info("[SimpleHttpHeartbeatSender] Runtime port not initialized, won't send heartbeat");
return false;
}
InetSocketAddress addr = getAvailableAddress();
if (addr == null) {
return false;
}
// 2. 访问dashboard 的接口
SimpleHttpRequest request = new SimpleHttpRequest(addr, TransportConfig.getHeartbeatApiPath());
request.setParams(heartBeat.generateCurrentMessage());
SimpleHttpResponse response = httpClient.post(request);
if (response.getStatusCode() == OK_STATUS) {
return true;
}
return false;
}
- Является ли приведенный выше код неработоспособным, когда первый шаг не взаимодействует, или это второй шаг, когда ошибка доступа оценивается как неработающая?
Проверятьsentinel clientбревно
cat ~/csp/sentinel-record.log
2020-03-23 13:54:04.634 INFO [SimpleHttpHeartbeatSender] Runtime port not initialized, won't send heartbeat
Начало вызывается первым шагом без инициализации взаимодействия, и услуга оценивается какdown
Как часовой инициирует взаимодействие
- Инициализировать интерактивный порт
commandCenter.start()
public class CommandCenterInitFunc implements InitFunc {
@Override
public void init() throws Exception {
CommandCenter commandCenter = CommandCenterProvider.getCommandCenter();
if (commandCenter == null) {
RecordLog.warn("[CommandCenterInitFunc] Cannot resolve CommandCenter");
return;
}
commandCenter.beforeStart();
// 开始初始化端口交互
commandCenter.start();
RecordLog.info("[CommandCenterInit] Starting command center: "
+ commandCenter.getClass().getCanonicalName());
}
}
- Конфигурация начинает загружаться и инициализироваться немедленно, вместо повторной инициализации при запросе трафика.
public class SentinelAutoConfiguration {
@Value("${project.name:${spring.application.name:}}")
private String projectName;
@Autowired
private SentinelProperties properties;
@PostConstruct
private void init() {
// earlier initialize
if (properties.isEager()) {
InitExecutor.doInit();
}
}
spring:
application:
name: @artifactId@
cloud:
sentinel:
eager: true
"★★★★★" Система управления разрешениями RBAC на основе Spring Boot 2.2, Spring Cloud Hoxton & Alibaba, OAuth2