Eureka部署注意事项
文章目录
本文主要对之前部署文档中的遗漏点和注意事项进行补充。
Eureka如何脱离SpringBoot部署?
Eureka嵌入SpringBoot部署笔记
一、服务端
在配置服务端的时候,为什么要配置域名,为什么要配置主机名?
在配置服务端的时候,完全可以不配置域名,Eureka的配置中,eureka.serviceUrl.default配置,使读取的IP地址或域名信息,但是这里要求这里配置的一定要和主机名一致,也就是说:
- 配置域名,那么肯定要配置域名解析,也肯定要把hostname改成与域名相同
- 配置IP,那么只需要配置hostname为IP,不需要配置域名解析(保证网络畅通)
例如,使用下面的配置,节点仍处于available-replicas中:
同理,对于嵌入式配置而言,
- 如果eureka.client.service-url.defaultZone使用的是域名,那么eureka.instance.hostname配置的就是主机名,我们就需要配置一个域名解析
- 如果eureka.client.service-url.defaultZone使用的是IP信息,那么eureka.instance.hostname配置的就是IP,也就不需要配置域名解析了
二、客户端
1. 客户端可以不使用域名配置吗?
客户端配置服务端地址时,是可以不需要域名的,可以直接使用IP。
2. 为什么调用生产者提供的接口时,会报错UnknownHostException?
要在配置RestTemplate的时候,加上@LoadBalance注解。
原理:
在使用 Eureka 作为注册中心时,
@LoadBalanced
注解是 Spring Cloud 提供的一个注解,它用于在 RestTemplate 上启用客户端负载均衡功能。负载均衡是指将请求分布到多个服务实例以提高系统的可用性和性能。**当你在配置 RestTemplate 时使用 **
**@LoadBalanced**
** 注解,Spring Cloud Ribbon(一个基于 HTTP 和 TCP 的负载均衡器)会与 Eureka 整合,允许 RestTemplate 根据服务名称进行负载均衡**。
如果在使用 RestTemplate 调用 B 服务的接口时没有使用
@LoadBalanced
注解,那么 RestTemplate 将不会使用 Ribbon 提供的负载均衡功能。此时,它将直接使用服务的实际 URL,而不会根据服务名称从 Eureka 注册中心获取服务的实例。因此,如果服务 B 的实例具有多个副本并且你希望进行负载均衡,直接使用实例的 URL 可能会导致无法处理负载均衡的情况,因此会报
UnknownHostException
错误。
而当你使用
@LoadBalanced
注解时,RestTemplate 将会与 Eureka 一起工作,根据服务名称来定位服务的实例,并通过 Ribbon 执行负载均衡。这样就可以避免直接使用实例的 URL,确保 RestTemplate 通过服务名称从 Eureka 注册中心获取实例的地址,并在多个实例之间进行负载均衡,从而成功调用服务 B 的接口。
所以,
@LoadBalanced
注解在 RestTemplate 上的作用是启用负载均衡功能,让 RestTemplate 能够根据服务名称从注册中心获取实例,并实现负载均衡。
版权归原作者 泼才 所有, 如有侵权,请联系我们删除。