Eureka Получение списка услуг

Как я могу получить уже зарегистрированный сервис от eureka?

Приведенный ниже код дает подробную информацию о конкретной услуге. Но я хочу список зарегистрированных сервисов.

Код:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

@RestController
class ServiceInstanceRestController {

    @Autowired
    private DiscoveryClient discoveryClient;

    @RequestMapping("/service-instances/{applicationName}")
    public List<ServiceInstance> serviceInstancesByApplicationName(
            @PathVariable String applicationName) {
        return this.discoveryClient.getInstances(applicationName);
    }
}

1 ответ

Довольно просто на самом деле:)

        List<Application> applications = discoveryClient.getApplications().getRegisteredApplications();

    for (Application application : applications) {
        List<InstanceInfo> applicationsInstances = application.getInstances();
        for (InstanceInfo applicationsInstance : applicationsInstances) {

            String name = applicationsInstance.getAppName();
            String url = applicationsInstance.getHomePageUrl();
            System.out.println(name + ": " + url);
        }
    }

Или, если вы не хотите тащить за собой весь мир библиотек spring-boot/Eureka и предпочитаете "чистый" тонкий клиент, вы можете просто выполнить простой GET для

http://<eureka host>:<port>/eureka/apps

как описано здесь Использование Eureka в качестве реестра с использованием REST API или, как мы это делаем, с использованием API администратора Springboot (описанного здесь, например, https://codecentric.github.io/spring-boot-admin/1.5.7/) и просто сделайте простой GET к

http://<springbootadmin host>:<port>/api/applications

при предоставлении учетных данных для входа с использованием заголовка Basic auth, т.е.

"Basic", java.util.Base64.getEncoder().encodeToString(("<springboot admin user>" + ":" + "<pwd>").getBytes());

Затем вы получите красивый ответ JSON, который легко проанализировать в коллекции объектов Java с использованием атрибутов JSON.

private String name; // service name
private String managementUrl; // an url from which host and port can be easily grabbed 
private StatusInfo statusInfo; // telling whether this service instance is up or down

например. Добавьте правильный hashcode () на основе toString () и equals(), и у вас будет что-то довольно подходящее для работы, хотите ли вы работать с наборами запущенных служб "в любом экземпляре" или уникальных экземплярах.

Другие вопросы по тегам