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

相关推荐
xcl09254 分钟前
民宿预约系统开发实战:从需求分析到上线部署全流程解析
java·spring boot
步行cgn17 分钟前
为何以继承方式引入SpringBoot
java·spring boot·后端
CoderYanger18 分钟前
A.每日一题:1140. 石子游戏 II
java·程序人生·算法·leetcode·游戏·职场和发展·深度优先
禾高网络20 分钟前
养老系统开发:背景、架构与养老行业展望
java·大数据·人工智能·小程序·架构
CCYe、1 小时前
新模型上线、旧模型下线:企业AI网关如何管住模型版本
java·网络·数据库·人工智能
风筝在晴天搁浅1 小时前
解题代码清爽版
java·开发语言
NeverFear7921 小时前
【黑马点评】短信登录
java·redis·tomcat·intellij-idea
2601_962298671 小时前
正则表达式引擎 哪些
java·python·perl·pcre·正则表达式引擎
孙克旭_1 小时前
JVM 入门详解:JVM、JRE、JDK 区别,JVM 基础结构梳理
java·开发语言·jvm
随遇而安zx2 小时前
【地基篇】---JVM 内存结构知识点(Java 8 运行时数据区深度解析)
java·开发语言·jvm