我已经创建了一个 Eureka 服务器并向其注册了两个客户端。客户之间的沟通顺畅。
在那之后,我停止了 Eureka 服务器,但我的两个客户端仍然可以顺利地相互通信。这怎么可能?我在第一个客户端中使用以下代码与第二个客户端通信。
ServiceInstance instance = loadbalancerclient.choose(secondService);
URI uri=URI.create(String.format("http://%s:%s"+"/test",instance.getHost(),instance.getPort()));
ResponseEntity<String> result = restTemplate.getForEntity(uri.toString(),String.class);
因为我使用的是 Eureka 服务器中第二个客户端的注册名称而不是硬编码任何 URL,所以我不希望它在服务器关闭时工作。谁能向我解释为什么会这样?
最佳答案
Eureka 不处理两个服务器之间的通信,只处理注册。这意味着服务仅使用 Eureka 来查找其他服务的地址。之后,通信直接在两个服务之间完成,无需 Eureka。
如果 Eureka 宕机,客户端会使用远程服务地址的缓存副本,这有利于弹性和临时网络故障。
稍微想一想,为什么行不通呢?如果 Eureka 宕机了,并不意味着远程服务也宕机了或者它的物理地址发生了变化。
关于java - 即使在我停止注册服务器后,Eureka 客户端仍然可以工作并相互通信。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52070247/