Spring (41)Eureka

Eureka是Netflix开发的服务发现框架,后来成为了Spring Cloud Netflix组件之一。它主要用于AWS云环境中管理服务间的注册与发现,但也可以在非AWS环境中工作。Eureka包含两个主要组件:Eureka Server和Eureka Client。

Eureka Server

Eureka Server提供服务注册服务。各个微服务启动时,会通过Eureka Client向Eureka Server注册自身服务的信息(如服务的地址、端口等),Eureka Server将这些信息存储在一个双层Map结构中,用于服务发现时的查询。

Eureka Server的启动

要创建一个Eureka Server,首先需要添加相应的依赖:

xml 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

然后,在Spring Boot应用的主类上使用@EnableEurekaServer注解来启动Eureka Server:

java 复制代码
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

application.yml配置示例:

yaml 复制代码
server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

这段配置启动了一个Eureka Server,并在8761端口监听。registerWithEureka: falsefetchRegistry: false的设置表示它不会将自己注册为客户端,也不会尝试获取服务注册信息,因为它是服务注册中心。

Eureka Client

Eureka Client是一个Java客户端,用于简化与Eureka Server的交互。客户端启动时,会向Eureka Server注册自己,并周期性地发送心跳来更新其服务续约。如果客户端长时间没有发送心跳,Eureka Server将会注销该实例。

客户端注册与发现

要使应用成为Eureka Client,需要添加以下依赖:

xml 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

并在主类上添加@EnableDiscoveryClient注解:

java 复制代码
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

application.yml配置示例:

yaml 复制代码
server:
  port: 8080

spring:
  application:
    name: myservice

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    preferIpAddress: true

这段配置定义了一个Eureka Client,它会在启动时自动注册到http://localhost:8761/eureka/上的Eureka Server。

源码解析

Eureka Server在处理注册请求时,主要是通过com.netflix.eureka.registry.AbstractInstanceRegistry类的register方法实现的。这个方法会把服务实例信息注册到内部的注册表中。对于服务的续约,则是通过renew方法来实现。

Eureka Client通过DiscoveryClient类与Eureka Server进行通信。在启动时,DiscoveryClient会向Eureka Server发送注册请求,同时会启动一个定时任务,定期向Server发送心跳,以续约服务。

总结

Eureka通过其Server和Client组件提供了一种简单有效的服务注册与发现机制。作为Spring Cloud Netflix项目的一部分,Eureka非常适合构建基于Spring Boot的微服务架构。通过使用Eureka,微服务之间能够相互发现并通信,从而提高了系统的整体可靠性和弹性。

相关推荐
墨染点香12 分钟前
LeetCode Hot100【6. Z 字形变换】
java·算法·leetcode
ldj202035 分钟前
SpringBoot为什么使用new RuntimeException() 来获取调用栈?
java·spring boot·后端
超龄超能程序猿36 分钟前
Spring 应用中 Swagger 2.0 迁移 OpenAPI 3.0 详解:配置、注解与实践
java·spring boot·后端·spring·spring cloud
风象南1 小时前
SpringBoot配置属性热更新的轻量级实现
java·spring boot·后端
洛阳泰山1 小时前
Spring Boot 整合 Nacos 实战教程:服务注册发现与配置中心详解
java·spring boot·后端·nacos
Y4090011 小时前
C语言转Java语言,相同与相异之处
java·c语言·开发语言·笔记
YuTaoShao1 小时前
【LeetCode 热题 100】994. 腐烂的橘子——BFS
java·linux·算法·leetcode·宽度优先
布朗克1681 小时前
java常见的jvm内存分析工具
java·jvm·数据库
en-route1 小时前
Http请求中的特殊字符
spring·http
都叫我大帅哥2 小时前
深入浅出 Resilience4j:Java 微服务的“免疫系统”实战指南
java·spring cloud