参考文章
spring cloud eureka 消费者使用服务名访问,不能访问的问题
使用spring cloud测试负载均衡时报java.lang.IllegalStateException: Request URI does not contain a valid hostname
1.先前存在的不足
先前我们希望访问一个已注册的服务时,我们首先要为 提供者 配置好公网IP,在启动后,调用者 获取实例的元数据,再从元数据中获取公网IP和端口号,随后才能发起请求进行调用。这样的话就存在诸多限制:
- 必须要先确定 提供者 的公网IP,一旦换了一台机器,就要重新配置;
- 调用者 要获取其元数据,操作繁琐。
2.改进:使用@LoadBalanced直接借助服务名发起访问
可以直接使用服务名进行调用。核心要点如下:
- [配置服务名] 被访问服务的配置文件中,需要添加
spring.application.name参数以配置服务名(不得有下划线"_"); - [RestTamplate添加注解] 在使用
@Bean将RestTamplate对象注入到Spring容器时,再添加@LoadBalanced注解。
-
[配置服务名] 提供者 的配置文件中,添加
spring.application.name参数对服务名进行配置。使用spring cloud测试负载均衡时报java.lang.IllegalStateException: Request URI does not contain a valid hostname

特别注意:下划线"_“无法被识别,因此服务名中不得有”_";
-
[RestTemplate添加注解] 找到 将RestTemplate对象注入Spring容器的代码,在其上再添加
@LoadBalanced
-
[借助服务名发起调用] 在 调用者 的接口中,借助服务名发起远程调用;

-
[启动服务测试结果] 在本地启动所有服务,通过
http://localhost:8081/hello/sayByRestTemplate调用接口。
本文介绍了Spring Cloud Eureka中如何改进服务调用方式,避免了之前需要配置公网IP的繁琐步骤。通过在RestTemplate上添加@LoadBalanced注解,可以直接使用服务名进行调用,简化了消费者调用提供者的过程。同时强调了服务名中不能含有下划线,并提供了配置和服务调用的示例。

581

被折叠的 条评论
为什么被折叠?



