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

相关推荐
J不A秃V头A26 分钟前
IntelliJ IDEA中设置激活的profile
java·intellij-idea
DARLING Zero two♡28 分钟前
【优选算法】Pointer-Slice:双指针的算法切片(下)
java·数据结构·c++·算法·leetcode
小池先生39 分钟前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
CodeClimb43 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
odng1 小时前
IDEA自己常用的几个快捷方式(自己的习惯)
java·ide·intellij-idea
CT随1 小时前
Redis内存碎片详解
java·开发语言
brrdg_sefg1 小时前
gitlab代码推送
java
hanbarger1 小时前
mybatis框架——缓存,分页
java·spring·mybatis
cdut_suye2 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
苹果醋32 小时前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx