SpringCloud —— Eureka 集群

桃扇骨 2023-07-18 09:15 79阅读 0赞

前文

微服务(一)SpringCloud 简介

微服务(二)SpringCloud 版本选型

微服务(三)SpringCloud 工程构建

SpringCloud —— Eureka 注册中心

文章目录

  • 前文
  • Eureka 集群说明
  • 单机版的 Eureka 配置
  • Eureka 集群
    • 修改 hosts 文件
    • 新建 Module(7001)
      • 添加依赖
      • 编写 application.yml 文件
      • 编写启动类
    • 新建 Module(7002)
      • 添加依赖
      • 编写 application.yml 文件
      • 编写启动类
  • 测试

Eureka 集群说明

先来看下单机版的 Eureka
在这里插入图片描述
服务注册:将服务信息注册进注册中心
服务发现:从注册中心上获取服务信息
实质:存 key 服务命令,取 key 调用地址


  • 先启动 Eureka 注册中心
  • 启动服务提供者
  • 服务启动后会把自身信息(比如服务地址以别名的方式注册进 Eureka)
  • 消费者服务在需要调用接口时,使用服务别名去注册中心获取实际的 RPC 远程调用地址
  • 消费者或得调用地址后,底层实际是利用 HttpClient 技术实现远程调用
  • 消费者获得服务地址后会缓存在本地 JVM 内存中,默认每间隔 30 s 更新一次服务调用地址

问题:微服务 RPC 远程服务调用最核心的是什么?

高可用,比如说注册中心只有 only one,那么当这个注册中心出现故障了,会导致整个服务环境不可用

所以需要搭建 Eureka 注册中心集群,实现负载均衡 + 故障容错

单机版的 Eureka 配置

在介绍集群的 Eureka 之前,先来看下单机版的

  1. server:
  2. port: 7001
  3. eureka:
  4. instance:
  5. hostname: localhost # Eureka 服务端的实例名称
  6. client:
  7. register-with-eureka: false # false 表示不向注册中心注册自己
  8. fetch-registry: false # false 表示自己端就是注册中心,职责就是维护服务实例,并不需要去检索服务
  9. service-url:
  10. # 设置与 Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
  11. defaultZone: http://${ eureka.instance.hostname}:${ server.port}/eureka/

单机版的 hostname 默认是 localhost,但是当有两台 Eureka 的时候,hostname 就不能写 localhost 了

Eureka 集群

在这里插入图片描述

修改 hosts 文件

打开 C:\Windows\System32\drivers\etc 路径,修改 etc 下的 hosts 文件,增加以下内容
在这里插入图片描述

新建 Module(7001)

在这里插入图片描述

添加依赖

  1. <dependencies>
  2. <!--eureka-server-->
  3. <dependency>
  4. <groupId>org.springframework.cloud</groupId>
  5. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  6. </dependency>
  7. <!--boot web actuator-->
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-actuator</artifactId>
  15. </dependency>
  16. <!--一般通用配置-->
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-devtools</artifactId>
  20. <scope>runtime</scope>
  21. <optional>true</optional>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.projectlombok</groupId>
  25. <artifactId>lombok</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-test</artifactId>
  30. <scope>test</scope>
  31. </dependency>
  32. <dependency>
  33. <groupId>junit</groupId>
  34. <artifactId>junit</artifactId>
  35. </dependency>
  36. </dependencies>

编写 application.yml 文件

注意:这里不能像单机版那样写了,应该 相互注册

  1. server:
  2. port: 7001
  3. eureka:
  4. instance:
  5. hostname: eureka7001.com # Eureka 服务端的实例名称
  6. client:
  7. register-with-eureka: false # false 表示不向注册中心注册自己
  8. fetch-registry: false # false 表示自己端就是注册中心,职责就是维护服务实例,并不需要去检索服务
  9. service-url:
  10. # 设置与 Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
  11. defaultZone: http://eureka7002.com:7002/eureka/

这个是 7001 端口的 EurekaServer,注册的地址是 7002 的

编写启动类

  1. package com.java.springcloud;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  5. /** * @author Woo_home * @create 2020/3/25 11:33 */
  6. @SpringBootApplication
  7. @EnableEurekaServer
  8. public class EurekaServerMain7001 {
  9. public static void main(String[] args){
  10. SpringApplication.run(EurekaServerMain7001.class,args);
  11. }
  12. }

新建 Module(7002)

在这里插入图片描述

添加依赖

  1. <dependencies>
  2. <!--eureka-server-->
  3. <dependency>
  4. <groupId>org.springframework.cloud</groupId>
  5. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  6. </dependency>
  7. <!--boot web actuator-->
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-actuator</artifactId>
  15. </dependency>
  16. <!--一般通用配置-->
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-devtools</artifactId>
  20. <scope>runtime</scope>
  21. <optional>true</optional>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.projectlombok</groupId>
  25. <artifactId>lombok</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-test</artifactId>
  30. <scope>test</scope>
  31. </dependency>
  32. <dependency>
  33. <groupId>junit</groupId>
  34. <artifactId>junit</artifactId>
  35. </dependency>
  36. </dependencies>

编写 application.yml 文件

  1. server:
  2. port: 7002
  3. eureka:
  4. instance:
  5. hostname: eureka7002.com # Eureka 服务端的实例名称
  6. client:
  7. register-with-eureka: false # false 表示不向注册中心注册自己
  8. fetch-registry: false # false 表示自己端就是注册中心,职责就是维护服务实例,并不需要去检索服务
  9. service-url:
  10. # 设置与 Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
  11. defaultZone: http://eureka7001.com:7001/eureka/

这个是 7001 端口的 EurekaServer,注册的地址是 7001 的

编写启动类

  1. package com.java.springcloud;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  5. /** * @author Woo_home * @create 2020/3/25 12:46 */
  6. @SpringBootApplication
  7. @EnableEurekaServer
  8. public class EurekaServerMain7002 {
  9. public static void main(String[] args){
  10. SpringApplication.run(EurekaServerMain7002.class,args);
  11. }
  12. }

测试

先后启动 7001,7002 项目
在这里插入图片描述
在这里插入图片描述
访问 http://localhost:7001/,可以发现 7001 指向的是 7002
在这里插入图片描述
访问 http://localhost:7002/,可以发现 7002 指向的是 7001
在这里插入图片描述
而且还可以通过域名访问,如:
在这里插入图片描述
在这里插入图片描述
这样,简单的 Eureka 集群就搭建好了

发表评论

表情:
评论列表 (有 0 条评论,79人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringCloud-eurekademo

    eureka的工作方式、原理: •会保存各个注册进来的微服务的基本信息:微服务名、ip、端口等 •eureka还会监控各个微服务的运行情况,做一个基本的监控,每隔30