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 小时前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
鹿屿二向箔2 小时前
基于SSM(Spring + Spring MVC + MyBatis)框架的汽车租赁共享平台系统
spring·mvc·mybatis
豪宇刘2 小时前
SpringBoot+Shiro权限管理
java·spring boot·spring
想进大厂的小王2 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
customer083 小时前
【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea
一只爱打拳的程序猿3 小时前
【Spring】更加简单的将对象存入Spring中并使用
java·后端·spring
杨荧3 小时前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
想进大厂的小王6 小时前
Spring-cloud 微服务 服务注册_服务发现-Eureka
微服务·eureka·服务发现
ajsbxi7 小时前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet