使用spring cloud测试负载均衡时报java.lang.IllegalStateException: Request URI does not contain a valid hostname
使用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)...
·
使用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不包含有效的主机名
更多推荐
已为社区贡献1条内容
所有评论(0)