我创建了一个 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);由于我没有对任何 URL 进行硬编码,而是使用 Eureka 服务器中第二个客户端的注册名称,因此我不希望它在服务器关闭时工作。有人可以向我解释为什么会发生这种情况吗?
2 回答
白板的微信
TA贡献1883条经验 获得超3个赞
Eureka 不处理两个服务器之间的通信,只处理注册。这意味着一个服务使用 Eureka 只是为了找出另一个服务的地址。之后直接在两个服务之间进行通信,没有 Eureka。
如果 Eureka 宕机,客户端使用远程服务地址的缓存副本,这有利于弹性和临时网络故障。
如果你稍微考虑一下,为什么它不起作用?如果 Eureka 宕机,并不意味着远程服务也宕机了,或者它的物理地址发生了变化。
守候你守候我
TA贡献1802条经验 获得超10个赞
从尤里卡文档:
获取注册表
Eureka 客户端从服务器获取注册表信息并将其缓存在本地。之后,客户端使用该信息来查找其他服务。通过获取上次获取周期和当前获取周期之间的增量更新,此信息会定期(每 30 秒)更新一次。增量信息在服务器中保存的时间更长(大约 3 分钟),因此增量提取可能会再次返回相同的实例。Eureka 客户端自动处理重复信息。
获取增量后,Eureka 客户端通过比较服务器返回的实例计数来与服务器协调信息,如果由于某种原因信息不匹配,则再次获取整个注册表信息。Eureka 服务器缓存 deltas、整个注册表和每个应用程序的压缩负载,以及未压缩的信息。有效负载还支持 JSON/XML 格式。Eureka 客户端使用 jersey apache 客户端获取压缩 JSON 格式的信息。
添加回答
举报
0/150
提交
取消