Весеннее облако DiscoveryClient. getLocalServiceInstance() устарела, как использовать регистрацию?

У меня есть требование получить текущий идентификатор экземпляра работающего микросервиса, проблема в том, что у меня есть требование, что если процесс не зарегистрирован, должен быть предоставлен "случайно сгенерированный" идентификатор экземпляра.

Я пытаюсь получить идентификатор экземпляра службы от DiscoveryClient, но, как показывает код getLocalServiceInstance устарела, и я не могу его использовать.

Я пытался использовать Registration как указано в Javadoc, но не может найти способ его инициализации.

Есть ли обычный / особый способ получить услугу собственной регистрации?

Кстати, я не могу использовать прямую реализацию, потому что это стартер, который не знает, какая реализация DiscoveryService будет доступна во время выполнения.

/**
 * @deprecated use the {@link org.springframework.cloud.client.serviceregistry.Registration} bean instead
 *
 * @return ServiceInstance with information used to register the local service
 */
@Deprecated
ServiceInstance getLocalServiceInstance();

2 ответа

Для этого мы можем напрямую внедрить bean-компонент, поскольку класс Registrationявляется абстракцией, она должна быть адаптирована различными клиентами обнаружения, например, если вы используете Eureka, это будет EurekaRegistrationпример. Для получения instanceId службы мы можем использовать следующий код:

      @Resource
private Registration serviceRegistration;

public Object someMethod() {
    //...
    String instanceId = serviceRegistration.getInstanceId();
    //...
}

мы также можем настроить instanceIdиспользуя eureka.instance.instance-idсвойство в application.yml, см . ответ spring eureka instanceId.

Код

discoveryClient.getServices().forEach(id -> {
            discoveryClient.getInstances(id).forEach(instance -> {
                logger.info("/hello, host:" + instance.getHost() + ", service_id:" + instance.getServiceId());
            });
        });
Другие вопросы по тегам