Весеннее облако 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());
});
});