【问题标题】:Why I can not use virtual hostname to get my micro service?为什么我不能使用虚拟主机名来获取我的微服务?
【发布时间】:2017-05-16 16:56:12
【问题描述】:

我的 eureka 中有一个提供程序,如下所示:

然后我使用restTemplate 来获取消息,如下所示:

  @Autowired
RestTemplate restTemplate;

@RequestMapping("getInfo")
public String getMessage(){
    return restTemplate.getForObject("http://microservice_provider/user/getUserInfo", String.class);
}

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

}

}

但它永远不会起作用。它告诉我:

那么,我该怎么做才能成功使用呢?

【问题讨论】:

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


    【解决方案1】:

    在 URL "http://microservice_provider" 中,主机名 microservice_provider 不是有效的主机名,因为下划线 _ 在主机名中无效。更改名称,它将起作用。最近进行了一项更改,以修复 NPE,并提供明确的错误消息。

    【讨论】:

      【解决方案2】:

      创建一个RestTemplate bean 并使用@LoadBalanced 注释您的bean。

      @LoadBalanced
      @Bean
      public RestTemplate loadBalancedRestTemplate() {
          return new RestTemplate();
      }
      

      这样,您可以使用微服务的名称 microservice_provider 作为 url 的一部分。

      String remotemsg = restTemplate.getForObject("http://microservice_provider/user/getInfo",String.class);
      

      【讨论】:

      • 对不起,其实我用过,忘了给你看,反正也没用。
      • 请通过发布完整的堆栈跟踪来更新您的问题。
      • 发布整个堆栈跟踪,以便我们可以看到抛出异常的位置。
      猜你喜欢
      • 2015-08-15
      • 2020-12-01
      • 2012-01-22
      • 2015-05-19
      • 2015-06-17
      • 2017-08-10
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多