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

相关推荐
weixin_lizhao4 分钟前
50天独立打造企业级API网关(二):安全防护体系与弹性设计
java·spring boot·安全·spring cloud·gateway
1.14(java)2 小时前
Spring事务和事务传播机制
java·数据库·spring
树下水月3 小时前
docker 常用命令
docker·容器·eureka
雨辰AI4 小时前
SpringBoot3 + 人大金仓 V9 全栈日志实战:Logback + Loki + Filebeat 构建统一日志平台
java·数据库·后端·云原生·eureka·logback·政务
Java成神之路-5 小时前
Java SPI vs Spring SPI
java·spring
bitt TRES15 小时前
springboot与springcloud对应版本
java·spring boot·spring cloud
布吉岛的石头21 小时前
微服务网关统一鉴权、限流、日志实战
java·spring·微服务
wxin_VXbishe1 天前
springboot新能源车充电站管理系统小程序-计算机毕业设计源码29213
java·c++·spring boot·python·spring·django·php
代码漫谈1 天前
一文学习 SpringBoot 的 application.yml 配置,基于 Spring Boot 3.2.x
java·spring boot·spring·配置文件
2301_771717211 天前
最近在刷牛客:使用Spring AOP实现性能监控时
java·后端·spring