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 小时前
Swagger
java·spring·swagger
G皮T1 小时前
【MyBatis】MyBatis 理论 40 问(二)
java·数据库·spring boot·spring·mybatis·关系映射
码界领航2 小时前
【Spring Cloud】一个例程快速了解网关Gateway的使用
spring·spring cloud·gateway
乐之者v3 小时前
Spring之 IoC、BeanFactory、ApplicationContext
java·后端·spring
Jinyi5035 小时前
Spring Boot 高级配置:如何轻松定义和读取自定义配置
java·spring boot·后端·spring·java-ee·maven·intellij-idea
*Soo_Young*5 小时前
【Spring AOP 源码解析前篇】什么是 AOP | 通知类型 | 切点表达式| AOP 如何使用
java·spring·aop
代码之光_19805 小时前
【微服务架构的守护神】Eureka与服务熔断深度解析
微服务·eureka·架构
青石路5 小时前
不单独部署注册中心,又要具备注册中心的功能,我能上天!
eureka·注册中心
伏颜.6 小时前
Spring懒加载Bean机制
java·spring
虫小宝7 小时前
在Spring Boot中实现多线程任务调度
java·spring boot·spring