如何在客户端上查找 Eureka 注册服务的 IP

How to find IPs of Eureka registered service on the clients

我有以下服务:

有没有办法获取客户端服务的 ip,以便我可以从 Finder 服务向它发出请求。

我知道有一种方法可以从 EurekaServer 中找到 InstanceInfo,我正在考虑在 eureka 服务器中创建一个控制器,您可以在其中传递服务 ID 并获取服务的实例 ip。这样 Finder-service 只需要知道它知道的服务 id 和 eureka ip,因为它在那里注册。

还有比这更干净的解决方案吗?

要使用客户端发现,您首先需要通过将 @EnableEurekaClient@EnableDiscoveryClient 添加到您的 @SpringBootApplication 注释 class(或您的专用 @Configuration ).

接下来要利用实际服务实例的分辨率,您需要创建一个负载平衡的 RestTemplate。这将添加一个拦截器,它将服务名称转换为 ip 地址/DNS 名称以将请求发送到(如果找到多个实例,它将在这些实例之间分配负载)。

要创建负载平衡 RestTemplate,请将 @LoadBalanced 注释添加到已配置的 RestTemplate

@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder rtb) {
    return rtb.build();
}

现在,当通过 RestTemplate 发出请求时,它会将服务名称 client-service 解析为要使用的实际服务实例。无需您做任何事情。