注册中心 —— SpringCloud Netflix Eureka

Eureka 简介

Eureka 是一个基于 REST 的服务发现组件,SpringCloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 SpringCloud 的服务注册与发现,同时提供了负载均衡、故障转移等能力,目前 Eureka2.0 已经不再维护,故不推荐使用

Eureka 有两种角色组件:

  • Eureka Server:服务注册中心组件,提供了服务的注册与发现的接口
  • Eureka Client:各种微服务,把自身的服务实例注册到 Eureka Server 中,也可通过 Eureka Server 获取服务列表,消费服务

微服务客户端在 Eureka 上注册,然后每隔 30 秒发送心跳来更新它们的租约。如果客户端不能多次续订租约,就将在大约 90 秒内从服务器注册表中剔除。注册信息和更新被复制到集群中的所有 Eureka 节点,来自任何区域的客户端都可以查找注册表信息(每30秒发生一次)来定位它们的服务并进行远程调用

搭建 Eureka 注册中心

创建 eureka-server 项目,引入依赖,本项目基于 SpringBoot 2.3.1,SpringCloud Hoxton.SR12

xml 复制代码
<dependencies>
    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
    ...
<dependencies>

在启动类上添加 @EnaleEurekaServer 注解,启用 Euerka 注册中心功能

java 复制代码
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

在配置文件添加 Eureka 服务端的配置

yaml 复制代码
server:
  port: 8001 # 指定运行端口

spring:
  application:
    name: eureka-server # 指定服务名称

eureka:
  instance:
    hostname: localhost # 指定主机名称
  client:
    fetch-registry: false # 指定能否从注册中心获取服务
    register-with-eureka: false # 指定是否将服务注册到注册中心

运行 main 方法启动服务,在浏览器中访问 http://localhost:8001/ 便可以看到 Eureka 注册中心的界面

创建 eureka-client 项目,引入依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

在启动类上添加 @EnableDiscoveryClient 注解,表明是一个 Eureka 客户端

java 复制代码
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

在配置文件添加 Eureka 客户端的配置

yaml 复制代码
server:
  port: 8101 # 指定运行端口

spring:
  application:
    name: eureka-client # 指定服务名称

eureka:
  client:
    fetch-registry: true # 指定能否从注册中心获取服务
    register-with-eureka: true # 指定是否将服务注册到注册中心
    service-url:
      defaultZone: http://localhost:8001/eureka

运行 main 方法,启动 eureka-client 项目,刷新 http://localhost:8001/ 页面,即可看到 cureka-client 已经注入 Eurcka 服务

搭建 Eureka 注册中心集群

由于所有服务都会注册到注册中心,服务之间的调用都是通过从注册中心获取服务列表来调用的。注册中心一旦宕机,所有服务调用都会出现问题,因此需要多个注册中心组成集群来提供服务

创建两个 eureka-server 项目,eureka-server-1 项目的配置文件如下:

yaml 复制代码
server:
  port: 8002 # 指定运行端口

spring:
  application:
    name: eureka-server-1 # 指定服务名称

eureka:
  instance:
    hostname: localhost # 指定主机名称
  client:
    fetch-registry: true # 指定能否从注册中心获取服务
    register-with-eureka: true # 指定是否将服务注册到注册中心
    service-url:
      defaultZone: http://localhost:8003/eureka/

eureka-server-2 项目的配置文件如下:

yaml 复制代码
server:
  port: 8003 # 指定运行端口

spring:
  application:
    name: eureka-server-1 # 指定服务名称

eureka:
  instance:
    hostname: localhost # 指定主机名称
  client:
    fetch-registry: true # 指定能否从注册中心获取服务
    register-with-eureka: true # 指定是否将服务注册到注册中心
    service-url:
      defaultZone: http://localhost:8002/eureka/

通过两个注册中心互相注册,搭建注册中心的双节点集群。分别启动项目,查看 http://localhost:8001/http://localhost:8002/,可以看到两个注册中心已经分别注册了

相关推荐
李少兄1 小时前
Docker 命令总结:从入门到入土
docker·容器·eureka
2401_857600951 小时前
深入剖析:Spring MVC与Struts的较量
struts·spring·mvc
被猫枕的咸鱼1 小时前
springmvc通过使用map来进行数据的接收和使用
spring
荆州克莱2 小时前
Big Data for AI实践:面向AI大模型开发和应用的大规模数据处理套件
spring boot·spring·spring cloud·css3·技术
r0ad3 小时前
SpringCloud2023实战之接口服务测试工具SpringBootTest
spring boot·后端·spring cloud
酸奶代码4 小时前
Spring AOP技术
java·后端·spring
代码小鑫4 小时前
A034-基于Spring Boot的供应商管理系统的设计与实现
java·开发语言·spring boot·后端·spring·毕业设计
.生产的驴5 小时前
SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性
java·spring boot·后端·spring·spring cloud·gateway·rabbitmq
小扳5 小时前
Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
运维·spring boot·后端·mysql·spring cloud·docker·容器
提高记忆力5 小时前
SpringBoot整合FreeMarker生成word表格文件
java·spring