使用spring cloud测试负载均衡时报java.lang.IllegalStateException: Request URI does not contain a valid hostname请求URI不包含有效的主机名异常

页面报错主要信息如下:

There was an unexpected error (type=Internal Server Error, status=500).
Request URI does not contain a valid hostname: http://provider_service/user/findById?id=2
java.lang.IllegalStateException: Request URI does not contain a valid hostname: http://provider_service/user/findById?id=2

翻译之后意思是

发生意外错误(类型=内部服务器错误,状态= 500)。
请求URI不包含有效的主机名:http:// provider_service / user / findById?id = 2
java.lang.IllegalStateException:请求URI不包含有效的主机名:http:// provider_service / user / findById?id = 2

idea中报错

java.lang.IllegalStateException: Request URI does not contain a valid hostname: http://provider_service/user/findById?id=2] with root cause

最后检查自己的服务提供者provider_service的配置文件application.yml中发现
设置应用名称,在注册中心中作为服务的id标识起名字时,使用了下划线"_"
以下是错误代码:

#应用名称,会在Eureka中作为服务的id标识
spring.application.name:provider_service
  @RequestMapping("/ribbonconsumer/{id}")
    public User findByIdWithRibbonConsumer(@PathVariable("id") Integer id) {
  		 /*
         * 开启Ribbon的负载均衡支持,那么请求地址变为服务的名称
         * http://localhost:9091/user/findById?id="+id
         * 修改调用请求的Url地址,改为服务名称调用
         */
        String url = "http://provider_service/user/findById?id=" + id;
        User user = restTemplate.getForObject(url, User.class);
        System.out.println("user = " + user);
        return user;
    }

正确应修改为:

#应用名称,会在Eureka中作为服务的id标识
spring.application.name:provider-service
  @RequestMapping("/ribbonconsumer/{id}")
    public User findByIdWithRibbonConsumer(@PathVariable("id") Integer id) {
  		 /*
         * 开启Ribbon的负载均衡支持,那么请求地址变为服务的名称
         * http://localhost:9091/user/findById?id="+id
         * 修改调用请求的Url地址,改为服务名称调用
         */
        String url = "http://provider-service/user/findById?id=" + id;
        User user = restTemplate.getForObject(url, User.class);
        System.out.println("user = " + user);
        return user;
    }

细看之下没有发现什么区别,真正的区别在于在配置文件中配置的应用名的符号不同,错误的那个使用的是"_",而正确的应该使用"-",
应该是因为不识别下划线,所以我们在黑应用起名字时不要使用下划线,所以才导致的请求URI不包含有效的主机名

Logo

鸿蒙生态一站式服务平台。

更多推荐