如何使用应用程序名称替换ip:关于spring cloud eureka的端口?

时间:2017-06-01 07:05:00

标签: spring-cloud netflix-eureka spring-cloud-netflix

spring cloud eureka问题:有3个微服务,1个eureka服务器,2个eureka客户端;

  1. 微服务A,B使用注释@EnableEurekaClient;

  2. 微服务A有一个RESTful api“http://localhost:8080/hi”。 api返回“你好”。

  3. 现在,我打电话给api,使用网址“http://client/hi”,但它不起作用。

  4. 如何使用应用程序名称替换ip:关于spring cloud eureka的端口?

  5. bootstrap.yml 内容:

    spring:
      application:
        name: client
    
    eureka:
      client:
        service-url:
          defaultZone: http://${eureka.host:localhost}:${eureka.port:8761}/eureka/
    

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,这取决于您在代码中调用REST API的方式。

如果您使用RestTemplate来调用API,则可以使用@LoadBalanced RestTemplate

执行此操作

在您想要调用REST API的代码中,请使用RestTemplate定义@LoadBalanced,如下所示。

@LoadBalanced
@Bean
RestTemplate restTemplate(){
  return new RestTemplate();
}

当您调用API时,只需使用应用程序名称而不是host:port,如下所示。

this.restTemplate.getForObject("http://client/hi", String.class)

如果您正在使用SpringCloud Feign,您可以定义接口以调用您的REST api,如下所示(无URL)

@FeignClient(name="client")
public interface ProductResource {
   : 
}

在弹簧启动应用程序中添加注释@EnableFeignClients,如下所示。

@SpringBootApplication
@EnableFeignClients
     : // other annotations you need.
public class YourAPIInvokerApplication {

在两种方式中,您都需要添加一些依赖项。