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

相关推荐
萧瑟余晖6 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
童槿顏丶8 小时前
docker自动化部署脚本
docker·eureka·自动化
Flittly12 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(二):执行隔离沙箱实战
java·spring boot·spring
BUG指挥官1 天前
Sa-Token和Spring Security对比
java·后端·spring
geminigoth1 天前
Spring AI Alibaba 入门开发一(备份)
java·人工智能·spring
xbgRS1 天前
spring整合mybaits
java·spring·mybatis
ruleslol2 天前
静态依赖注入 VS 动态依赖查询
spring
墨雨晨曦882 天前
Spring AI总结
java·人工智能·spring
用户3126874877202 天前
Spring Boot 异常处理到底怎么玩的?从 DispatcherServlet 到全局兜底的全链路拆解
spring
不才不才不不才2 天前
Spring 源码系列(17): HandlerMapping 与 HandlerAdapter 两大体系
java·后端·spring