SpringCloud_Eureka注册中心

概述

Eureka是SpringCloud的注册中心。

是一款基于REST的服务治理框架,用于实现微服务架构中的服务发现和负载均衡。

在Eureka体系中,有两种角色: 服务提供者和服务消费者。

服务提供者将自己注册到Eureka服务器,服务消费者从Eureka服务器中获取可用的服务列表,并根据负载均衡算法选择其中一个来调用。

特点

  1. 高可用性:Eureka服务器采用了分布式架构,可以通过集群搭建来实现高可用性,同时也支持自我保护机制,即当Eureka服务器在一段时间内无法与客户端通信时,不会立即清理服务注册表中的信息,而是将其保护起来,以防止因网络问题导致的误删。

  2. 易于扩展:Eureka支持通过集群方式进行扩展,只需要增加新的Eureka服务器节点即可。

  3. 支持多种语言和框架:Eureka是基于REST实现的,因此可以支持多种语言和框架,只需要遵循它的API规范即可。

  4. 灵活的配置:Eureka提供了大量可配置项,如心跳间隔、注册信息缓存时间等,可以根据实际情况进行配置。

  5. 易于使用:Eureka提供了Java客户端库,可以方便地进行服务注册和发现,并且与Spring Cloud等框架集成良好。

结构和作用

  1. 注册服务信息

    服务提供者的服务实例启动后,将自己的信息注册到Eureka-server(Eureka服务端)

    eureka-server保存服务名称到服务实例地址列表的映射关系

  2. 服务发现/服务拉取

    服务消费者根据服务名称,拉去实例地址列表

  3. 负载均衡

    服务消费者从实例列表中利用负载均衡算法选中一个实例地址

  4. 远程调用

    服务消费者向实例地址发起远程调用

  5. 心跳续约

  • 服务提供者实例会每隔一段时间(默认30秒)向eureka-server发起请求,报告自己状态,称为心跳
  • 当超过一定时间没有发送心跳时,eureka-server会认为微服务实例故障,将该实例从服务列表中剔除
  • 服务消费者拉取服务时,就能将故障实例排除了

注意:一个微服务,既可以是服务提供者,又可以是服务消费者,因此eureka将服务注册、服务发现等功能统一封装到了eureka-client端

实现Eureka

  1. 创建eureka-server服务
    新建模块,并在spring initialize中选择Eureka Server的依赖
    可以看到在新建模块的依赖中加入了
xml 复制代码
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
  1. 在Eureka的启动类上加上@EnableEurekaServer注解

    开启eureka的注册中心功能

  2. 编写配置文件

    编写一个application.yml文件,内容如下:

yml 复制代码
server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka
  1. 启动服务并访问http://127.0.0.1:10086

    如上页面表示成功

  2. 服务注册

    在对应服务的pom.xml中引入eureka-client依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 修改服务的配置文件
    添加服务名称和eureka地址
yml 复制代码
spring:
  application:
    name: userservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
  1. 启动多个服务实例

    复制配置,并且为服务修改名称

    在配置中需要修改配置中的端口号,就需要使用覆盖配置

    勾选允许多个实例

    启动多个服务实例后,可在该服务的空间中看到服务空间中数量增多,并且占用2个端口号

  2. 服务发现

    服务发现、服务注册统一封装在eureka-client依赖中,所以同样注入该依赖即可

    同样需要修改配置文件,同样是服务名称和注册中心地址

yml 复制代码
spring:
  application:
    name: orderservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
  1. 服务拉取和负载均衡
    从服务注册中心eureka-server中拉去服务的实力列表并实现负载均衡
    需要在服务消费者的启动类上的RestTemplate这个Bean添加@LoadBalanced注解
    然后在对应服务中将restTemplate的url中的ip:port改为服务名即可
    spring会自动帮助我们从eureka-server端,根据userservice这个服务名称,获取实例列表,而后完成负载均衡。
    示例:
    http://localhost:8081/user/改为http://userservice/user/

注意:能将ip:port改为服务名称只是因为LoadBalancerInterceptor对RestTemplate的请求进行拦截,从Eureka根据服务id获取服务列表,利用负载均衡算法得到真实的服务地址信息,替换服务id

相关推荐
唐青枫1 天前
Java Spring WebFlux 实战指南:用 Mono、Flux 和 WebClient 写响应式接口
java·spring
咖啡八杯3 天前
GoF设计模式——策略模式
java·后端·spring·设计模式
Flittly4 天前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
dunky4 天前
Spring 的三级缓存与循环依赖
后端·spring
码云数智-园园9 天前
C++20 Modules 模块详解
java·开发语言·spring
咖啡八杯9 天前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
Flittly9 天前
【AgentScope Java新手村系列】(10)实战-多Agent天气助手
java·spring boot·spring
李少兄9 天前
从原理到实战:Spring IoC/DI 核心知识体系与高频面试题全解
java·后端·spring
shushangyun_9 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
慧一居士9 天前
Feign的GET请求如何传递对象参数?
java·spring cloud