java - 即使在我停止注册服务器后,Eureka 客户端仍然可以工作并相互通信。如何?

标签 java spring-boot microservices netflix-eureka netflix-ribbon

我已经创建了一个 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/

相关文章:

java - Spring 批量调度程序 : Job Listener works only for the first time the job runs

java - Spring Boot EntityManagerFactoryBuilder 未 Autowiring

web-applications - 应用程序负载均衡器前面的 API 网关?

java - 购物车中的最后一件商品

java - 如何在运行 gradlecompileJava 时修复相关子项目中的 "Cannot find symbol error"

java - 树莓派上的 Midi 输入

unit-testing - 不可能对 Spring Data JPA @Query 进行单元测试,真的吗?

java - 有没有办法在 Spring Boot 微服务中完成异步进程响应时处理它们?

java - 使用通用 ID 扩展基本实体的实体的 ID 映射

java - 将自定义端点添加到 Spring Data REST 存储库并在 Swagger 中显示