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,微服务之间能够相互发现并通信,从而提高了系统的整体可靠性和弹性。

相关推荐
程序猿小D1 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统
转转技术团队2 小时前
二奢仓店的静默打印代理实现
java·后端
钢铁男儿2 小时前
C# 接口(什么是接口)
java·数据库·c#
丶小鱼丶2 小时前
排序算法之【归并排序】
java·排序算法
上上迁2 小时前
分布式生成 ID 策略的演进和最佳实践,含springBoot 实现(Java版本)
java·spring boot·分布式
永日456702 小时前
学习日记-spring-day42-7.7
java·学习·spring
龙谷情Sinoam3 小时前
扩展若依@Excel注解,使其对字段的控制是否导出更加便捷
java
二十雨辰3 小时前
[尚庭公寓]07-Knife快速入门
java·开发语言·spring
掉鱼的猫3 小时前
Java MCP 实战:构建跨进程与远程的工具服务
java·openai·mcp
我爱Jack3 小时前
时间与空间复杂度详解:算法效率的度量衡
java·开发语言·算法