原因
-
在微服务架构中,服务之间的调用通常不是通过硬编码的域名或IP地址进行的,而是通过一个“服务名”进行。这是因为服务可能会部署在多个节点上,并且这些节点的IP地址可能会经常变化(例如,在容器化环境中)。如果你直接使用域名或IP地址调用服务,你将无法利用负载均衡器来分发请求,并且你需要手动管理这些地址的变更。
-
相反,当你使用服务名进行调用时,Spring Cloud 会通过其内置的服务发现机制(如 Eureka)来查找与该服务名关联的所有实例的地址列表。然后,Ribbon 会从这个列表中选择一个合适的实例来发送请求。这就是为什么你需要在 RestTemplate 的 URL 中使用服务名,而不是域名或IP地址。
解决方法
两种方法
- 取消@LoadBalanced注解
- 改为使用服务名调用
@GetMapping("/consumer/payment/zipkin")
public String paymentZipkin()
{
String result = restTemplate.getForObject(PAYMENT_SERVER_URL+"/payment/zipkin/", String.class);
return result;
}
感谢大佬的文章
https://blog.csdn.net/yf1806/article/details/118303874