Обнаружение / Регистрация работает только тогда, когда модуль K8s уже зарегистрирован. - PullRequest
0 голосов
/ 11 октября 2018

Спасибо за Spring Boot Admin!

Я использую его с Spring Cloud Kubernetes, наши модули k8s обнаруживаются только тогда, когда мы запускаем Spring Boot Admin, после запуска модулей службы.

Похоже, что поиск InstanceDiscoveryListener, обнаружение клиентов, произойдет на основе событий.Как ApplicationReadyEvent (при запуске) и, например, InstanceRegisteredEvent.

Правильно ли говорить, что Spring Boot Admin не будет пытаться обнаруживать периодически?Если так, как я могу убедиться, что событие запускается из приложения, чтобы Spring boot admin поднял его и зарегистрировал экземпляр?

Особенно для того, чтобы убедиться, что экземпляры зарегистрированы, когда они запускаются после запуска весенней загрузки admin.(Порядок, в котором запускаются k8s-модули, произвольный / сложный для управления, чего мы вообще не хотим делать).

Спасибо!Кристофью

Версия:

    springBootAdminVersion = '2.0.1'
    springCloudVersion = 'Finchley.RELEASE'
    springCloudK8s = '0.3.0.RELEASE' 

1 Ответ

0 голосов
/ 17 февраля 2019

Не уверен, что это лучший способ решить проблему, но, похоже, работает:

class TimedInstanceDiscoveryListener extends InstanceDiscoveryListener {

    private static final Logger log = LoggerFactory.getLogger(TimedInstanceDiscoveryListener.class);

    public TimedInstanceDiscoveryListener(DiscoveryClient discoveryClient, InstanceRegistry registry, InstanceRepository repository) {
        super(discoveryClient, registry, repository);
        log.info("Starting custom TimedInstanceDiscoveryListener");
    }

    @Scheduled(fixedRate = 5000)
    public void periodicDiscovery() {
        log.info("Discovering new pod / services");
        super.discover();
    }
}
@Bean
@ConfigurationProperties(prefix = "spring.boot.admin.discovery")
public InstanceDiscoveryListener instanceDiscoveryListener(ServiceInstanceConverter serviceInstanceConverter,
                                                           DiscoveryClient discoveryClient,
                                                           InstanceRegistry registry,
                                                           InstanceRepository repository) {

    InstanceDiscoveryListener listener = new TimedInstanceDiscoveryListener(discoveryClient, registry, repository);
    listener.setConverter(serviceInstanceConverter);
    return listener;
}
...