我可以让eureka服务器以点对点的方式运行。但我对如何使服务发现客户端向多个eureka服务器注册感到好奇。
我的应用场景是这样的:假设我有一个服务注册到其中一个eureka服务器(例如,服务器A),并且该注册正在被复制到其同级。该服务实际上指向服务器A。如果服务器A崩溃,客户端期望与服务器A进行续订,那么如果客户端无法与服务器A通信,续订会如何工作?
我需要同时注册吗?如果不需要,则在客户端无法与服务器A通信时,如何进行续订操作?它是否具有关于服务器B的某些知识(来自与A的初始和/或随后的通信),并故障转移以在那里进行注册续订?文档中没有明确说明这一点,因此我需要进行验证。
基于答案,我将以下内容添加到我的application.yml文件中:
我的应用场景是这样的:假设我有一个服务注册到其中一个eureka服务器(例如,服务器A),并且该注册正在被复制到其同级。该服务实际上指向服务器A。如果服务器A崩溃,客户端期望与服务器A进行续订,那么如果客户端无法与服务器A通信,续订会如何工作?
我需要同时注册吗?如果不需要,则在客户端无法与服务器A通信时,如何进行续订操作?它是否具有关于服务器B的某些知识(来自与A的初始和/或随后的通信),并故障转移以在那里进行注册续订?文档中没有明确说明这一点,因此我需要进行验证。
基于答案,我将以下内容添加到我的application.yml文件中:
eureka:
# these are settings for the client that gets services
client:
# enable these two settings if you want discovery to work
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://localhost:8762/eureka/, http://localhost:8761/eureka/
它仅注册逗号分隔列表中的第一个。如果我交换它们,注册将在eureka服务器之间翻转。
我可以看到它确实基于逗号分隔符对这些进行分离,但我猜测Eureka在底层不使用这个(来自EurekaClientConfigBean.java)
@Override
public List<String> getEurekaServerServiceUrls(String myZone) {
String serviceUrls = this.serviceUrl.get(myZone);
if (serviceUrls == null || serviceUrls.isEmpty()) {
serviceUrls = this.serviceUrl.get(DEFAULT_ZONE);
}
if (serviceUrls != null) {
return Arrays.asList(serviceUrls.split(","));
}
return new ArrayList<>();
}