Eureka是什么?它是如何工作的?

Eureka是Netflix开发的服务发现框架,现在是Spring Cloud生态系统的一部分。它主要用于AWS云平台,用来定位服务,以实现中间层服务器的负载均衡和故障转移。在微服务架构中,服务发现是关键的一环,它允许服务和服务彼此发现并通信,这样客户端就不需要硬编码目标服务的位置。

Eureka的主要组件:

Eureka由两个主要组件组成:Eureka Server和Eureka Client。

Eureka Server

Eureka Server充当服务注册中心。它是一个服务发现机制的核心,所有可用服务的实例都在此注册,并通过心跳机制保持注册信息是最新的。Eureka Server提供了一个REST API,可供服务实例注册或用户查询当前注册的服务列表。

要创建Eureka Server,你需要一个Spring Boot应用程序,并使用@EnableEurekaServer注解启用Eureka Server功能:

java 复制代码
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

在application.yml中配置Eureka Server:

java 复制代码
server:
  port: 8761
  
eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

上述配置启动了一个运行在端口8761上的Eureka Server,并通过设置registerWithEureka: false和fetchRegistry: false告诉它不要尝试将自己注册为客户端或尝试获取注册表。

Eureka Client

Eureka Client是一个Java客户端,用于简化与Eureka Server的交互。客户端服务在启动时向Eureka Server注册自身,并定期发送心跳来维持其在注册表中的状态。

要使应用成为Eureka Client,你需要在Spring Boot应用上添加@EnableEurekaClient或@EnableDiscoveryClient注解:

java 复制代码
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

工作原理:

服务注册:当Eureka Client启动时,它会向Eureka Server发送一个注册请求,将其自身的网络地址等信息注册到Eureka Server。

服务续约:Eureka Client定期向Eureka Server发送心跳(默认每30秒一次)来维持其在注册表中的状态。如果Eureka Server在一定时间内(默认90秒)没有接收到某个实例的心跳,它将注销该实例。

服务下线:当Eureka Client正常关闭时,它会向Eureka Server发送一个下线请求,告知Eureka Server自己将要下线。

获取注册的服务:Eureka Client可以从Eureka Server获取当前所有注册服务的信息列表,客户端内部会缓存这个信息列表,并周期性地更新。

服务副本:Eureka Server可以运行多个实例,它们之间相互复制注册信息,形成高可用集群。

通过Eureka的这些机制,Spring Cloud应用可以实现自动化的服务注册、发现和状态维护,这极大地简化了分布式系统中的网络通信和基础设施管理。

相关推荐
CCblandy7 小时前
一致性哈希到底省了多少搬迁?本机实测 3 轮:取模 6→7 搬 85.8%,V=128 只搬 14.3%,虚拟节点太少会被倾斜骗
后端·python·云原生·性能优化·架构
code_slave(码畜)7 小时前
微服务架构落地:OpenFeign 服务远程调用 + 线程池隔离架构实战 —— 超时控制、重试机制、线程池隔离,防雪崩
spring boot·spring cloud·微服务·云原生·架构·openfeign
涵美女程序猿8 小时前
ChatCut online 剪微服务熔断测试录屏:仪表盘告警、降级日志与恢复时刻怎样对应
程序人生·微服务·云原生·架构·电脑
古城小栈8 小时前
Docker Compose 云原生的底座
docker·云原生·容器
分布式存储与RustFS10 小时前
训练集放在 RustFS 上,怎么像本地盘一样快?用 Curvine 加一层 POSIX 缓存
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
easy_coder10 小时前
Kubernetes 三大探针:Startup、Liveness 与 Readiness
云原生·容器·kubernetes
KIDULT°12 小时前
Kubeadm 部署 Kubernetes v1.30.2 实战:Ubuntu24.04 三节点集群 + 排坑记录
ubuntu·云原生·容器·kubernetes·k8s
逃逸线LOF13 小时前
Cloud服务注册中心异同点对比Nacos|Eureka|zookeeper|consul
zookeeper·eureka·consul
阿里云云原生1 天前
AgentLoop 审计:如何让企业级 Dify 应用的风险看得见、查得清
云原生·agent
阿里云云原生1 天前
云栖实录丨云监控 2.0 让 Agent 看懂系统,也能看懂 Agent
云原生