当前位置: 首页 > news >正文

SpringCloud核心组件Eureka菜鸟教程

关于Spring Cloud Eureka的核心概念

      Eureka 是 Netflix 开源的一款基于 REST 的服务发现工具,主要用于中间层服务器的云端负载均衡。它通过维护一个服务注册表来实现服务之间的通信1。在 Spring Cloud 中,Eureka 提供了一个高可用的服务注册与发现机制,使得微服务架构中的各个模块可以动态地加入或退出集群

一、核心工作原理
  1. 服务注册
    服务提供者(Eureka Client)启动时,向Eureka Server发送元数据(IP、端口、健康状态等)完成注册,注册表存储结构为:

    Map<String, Map<String, Lease<InstanceInfo>>>Map<String, Map<String, Lease<InstanceInfo>>>

    其中外层Map键为服务名称,内层Map键为实例ID2

  2. 服务续约
    客户端每30秒发送心跳包(eureka.instance.lease-renewal-interval-in-seconds),服务端收到后更新租约时间。若90秒未收到心跳(eureka.instance.lease-expiration-duration-in-seconds),标记实例不可用。

  3. 服务发现
    消费者通过服务名称向Eureka Server获取实例列表,默认每30秒更新本地缓存(eureka.client.registry-fetch-interval-seconds)。

  4. 服务剔除
    Eureka Server每60秒检查失效实例(eureka.server.eviction-interval-timer-in-ms),启动自我保护模式时暂停剔除

二、服务端配置(EUREKA SERVER)
  1. 依赖配置
    pom.xml中添加Eureka Server依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

接着,在启动类上添加 @EnableEurekaServer 注解即可启用 Eureka Server 功能

配置文件设置

以下是典型的 application.ymlapplication.properties 文件配置示例,用于初始化单节点的 Eureka Server:

server:port: 8761  # Eureka默认端口
eureka:instance:hostname: localhostclient:register-with-eureka: false  # 服务端无需自我注册fetch-registry: false        # 不拉取注册表service-url:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

启动类注解
添加@EnableEurekaServer以激活服务端:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
三、客户端配置(EUREKA CLIENT)
  1. 依赖配置
    客户端需引入spring-cloud-starter-netflix-eureka-client

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    配置文件application.yml

    spring:application:name: user-service  # 服务名称
    eureka:client:service-url:defaultZone: http://localhost:8761/eureka/  # 注册到Eureka Server

    启动类注解
    使用@EnableDiscoveryClient@EnableEurekaClient(两者等效):

@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {public static void main(String[] args) {SpringApplication.run(UserServiceApplication.class, args);}
}

 

四、核心代码实现步骤
  1.  服务注册
    客户端启动后自动向Eureka Server注册,可通过http://localhost:8761查看注册列表。

  2. .服务发现

      使用DiscoveryClient动态获取其他服务实例

@Autowired
private DiscoveryClient discoveryClient;public List<ServiceInstance> getServiceInstances(String serviceName) {return discoveryClient.getInstances(serviceName);
}

 3. 服务消费者调用

@RestController
public class ConsumerController {@Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("/call")public String callService() {List<ServiceInstance> instances = discoveryClient.getInstances("PROVIDER-SERVICE");// 负载均衡逻辑...}
}
五、高级配置示例
  1. 高可用集群

部署多个Eureka Server并相互注册YAML: 

# 节点1配置
eureka:client:service-url:defaultZone: http://eureka-node2:8762/eureka/
# 节点2配置
eureka:client:service-url:defaultZone: http://eureka-node1:8761/eureka/

 安全认证
添加Spring Security依赖并配置YAML:

eureka:client:service-url:defaultZone: http://user:password@localhost:8761/eureka/

 健康检查与元数据
启用健康检查并自定义元数据YAML

eureka:instance:health-check-url-path: /actuator/healthmetadata-map:zone: us-east

 

相关文章:

  • LaTex、pdfLaTex、XeLaTex和luaLaTex的区别和联系
  • Docker常见命令
  • 关于指针和指针算术
  • 开发常使用的团队协作工具
  • 再谈从视频中学习:从给视频打字幕的Humanoid-X、UH-1到首个人形VLA Humanoid-VLA:迈向整合第一人称视角的通用人形控制
  • 文本向量化
  • FastAPI + Redis Pub/Sub + WebSocket 组合解决方案的详细介绍
  • Redis01-基础-入门
  • 信创系统 sudoers 权限配置实战!从小白到高手
  • 引领印尼 Web3 变革:Mandala Chain 如何助力 1 亿用户迈向数字未来?
  • 刀客独家 | 潘胜接管百度移动生态市场部
  • 【Linux】Centos7 在 Docker 上安装 mysql8.0(最新详细教程)
  • 【嘉立创EDA】如何在更新或转换原理图到PCB时,保留已有布局器件
  • QML中的色彩应用
  • .dep 和.rpm有什么区别?
  • 马哥教育Linux云计算运维课程
  • 统信操作系统使用默认yum源安装 Docker 的踩坑
  • 2025通信会丨以创新技术赋能新型电力系统 锐捷知识大脑推动效率提升
  • markdown-it-katex 安装和配置指南
  • Dify框架面试内容整理-Dify如何处理知识库的集成?
  • 新剧|反谍大剧《绝密较量》央一开播,张鲁一高圆圆主演
  • 人社部:我国劳动力市场潜力足,韧性强
  • 人社部:就业政策储备充足,将会根据形势变化及时推出
  • 深一度|“凑合过”的利物浦,英超第二冠只求性价比
  • 百岁太极拳大师、陈氏太极拳第十一代嫡宗传人陈全忠逝世
  • 驻美国使馆发言人就美方希就关税问题与中方对话答记者问