Eureka Server 实现在线扩容作者:Grey
原文地址:
博客园:Eureka Server 实现在线扩容
CSDN:Eureka Server 实现在线扩容
需求Eureka 是 Spring Cloud Netflix 套件中的服务注册中心组件,作为微服务的核心组件,需要支持在线扩容的需求 。
【Eureka Server 实现在线扩容】本示例模拟 Eureka 从单实例在线扩容到三个实例的过程 。
环境Java 版本:17
Spring Boot 版本:2.7.5
Spring Cloud 版本:2021.0.4
项目结构和说明
- eureka-scale-out-online:父项目名称
- server : 服务端模块
- src/
- pom.xml
- client : 客户端模块
- src/
- pom.xml
- config : 配置中心模块,使用本地配置
- src/
- pom.xml
- pom.xml:父项目 pom 配置
- server : 服务端模块
完整代码见:Github
单个 Eureka 实例将 config 项目中的 eureka-client.yml 修改为
server:port: 8081spring:application:name: eureka-client1eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
将 config 项目中的 eureka-server-peer1.yml 修改为server:port: 8761spring:application:name: eureka-servereureka:instance:hostname: localhostpreferIpAddress: trueclient:registerWithEureka: truefetchRegistry: trueserviceUrl:defaultZone: http://localhost:8761/eureka/server:waitTimeInMsWhenSyncEmpty: 0enableSelfPreservation: false
依次启动 config 模块(运行 ConfigStartApp.java 这个类),server 模块(运行 ServerStartApp.java 这个类),client 模块(运行 ClientStartApp.java 这个类),注:server 模块在启动过程中,需要指定 peer1 这个配置文件 。
文章插图
启动完毕后,可以通过浏览器访问:http://localhost:8761/
看到目前的服务注册情况
文章插图
目前 Eureka Server 只有一个实例 。
在线扩充到两个 Eureka 实例保持上述运行环境,先不做任何重启动作,由于要增加一个实例 , 所以将 config 项目中的 eureka-server-peer2.yml 修改为
server:port: 8762eureka:instance:hostname: localhostpreferIpAddress: trueclient:registerWithEureka: truefetchRegistry: trueserviceUrl:defaultZone: http://localhost:8761/eureka/server:waitTimeInMsWhenSyncEmpty: 0enableSelfPreservation: false
同时 , 把 eureka-server-peer1.yml 内容调整为server:port: 8761spring:application:name: eureka-servereureka:instance:hostname: localhostpreferIpAddress: trueclient:registerWithEureka: truefetchRegistry: trueserviceUrl:defaultZone: http://localhost:8762/eureka/server:waitTimeInMsWhenSyncEmpty: 0enableSelfPreservation: false
客户端需要感知到两个 Eureka Server 的存在 , 所以,也要修改 内容为server:port: 8081spring:application:name: eureka-client1eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
配置修改完毕后,首先,重启 config 模块(注:由于配置的是 native 模式 , 需要重启,如果用 Git 托管,则无须重启)
然后启动 server peer2 实例 , 启动时做如下配置
文章插图
接下来,使用 Eureka 的管理 API,将 client 模块实例和 server peer1 实例的配置进行热更新,操作如下
使用命令行或者 Postman 工具 , 发送如下请求
文章插图
通过浏览器再次访问:http://localhost:8761/,出现两个实例
文章插图
在线扩充到三个 Eureka 实例同理,维持上述运行实例,先不要做任何重启动作,修改 eureka-client.yml 配置,让客户端感知到三个实例
server:port: 8081spring:application:name: eureka-client1eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/
修改 peer1 的配置server:port: 8761spring:application:name: eureka-servereureka:instance:hostname: localhostpreferIpAddress: trueclient:registerWithEureka: truefetchRegistry: trueserviceUrl:defaultZone: http://localhost:8762/eureka/,http://localhost:8763/eureka/server:waitTimeInMsWhenSyncEmpty: 0enableSelfPreservation: false
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- React实现一个简易版Swiper
- 四十七 SpringCloud微服务实战——搭建企业级开发框架:【移动开发】整合uni-app搭建移动端快速开发框架-添加Axios并实现登录功能
- 二 SpringCloud - Eureka注册中心,feign远程调用,hystrix降级和熔断
- 【Serverless】云函数微信小程序
- 二 京东云开发者| Redis数据结构-List、Hash、Set及Sorted Set的结构实现
- 一 Redis数据结构-Redis的数据存储及String类型的实现
- Springboot 一行代码实现文件上传 20个平台!少写代码到极致
- C#实现生成Markdown文档目录树
- 利用inotify和rsync服务实现数据实时同步
- OpenAPI 接口幂等实现