千家信息网

Spring Eureka集群的搭建方法

发表于:2025-02-11 作者:千家信息网编辑
千家信息网最后更新 2025年02月11日,这篇文章主要介绍"Spring Eureka集群的搭建方法",在日常操作中,相信很多人在Spring Eureka集群的搭建方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2025年02月11日Spring Eureka集群的搭建方法

这篇文章主要介绍"Spring Eureka集群的搭建方法",在日常操作中,相信很多人在Spring Eureka集群的搭建方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Spring Eureka集群的搭建方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前言

Eureka 主要是用于进行服务的注册和发现,今天就来学习一下如何使用 Eureka,关于 Eureka的更多信息可以参考 Netflix / eureka 和 Spring-Eureka

Eureka 的主要架构图如下所示:

Eureka 主要有三种角色,Eureka Server, Eureka Client,其中 Eureka Client 包括 Service Provider 和 Service Consumer

1、Eureka Server :注册中心,提供服务注册和发现,注册中心可以搭建成集群模式来实现服务的高可用

2、Service Provider : 服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到

3、Service Consumer:服务消费方,从Eureka获取注册服务列表,从而能够消费服务

例子

接下来,根据 Spring Eureka 的 官方文档 来手动写一个例子。

Eureka Server

先来实现 Eureka Server 注册中心,首先新建 Spring 的 maven 项目, pom 文件如下:

    4.0.0    com.tsmyk    eureka_server    0.0.1-SNAPSHOT    eureka_server    Demo project for Spring Boot            org.springframework.boot        spring-boot-starter-parent        2.1.6.RELEASE                         1.8        UTF-8        UTF-8        Greenwich.SR1                            org.springframework.cloud            spring-cloud-starter-netflix-eureka-server                            org.springframework.boot            spring-boot-starter-test            test                                                    org.springframework.cloud                spring-cloud-dependencies                ${spring-cloud.version}                pom                import                                                                org.springframework.boot                spring-boot-maven-plugin                        

然后在 application.properties 配置文件中添加如下配置:

spring.application.name=spring-cloud-eureka# 端口server.port=8761# IPserver.ip=localhost#表示是否将自己注册到Eureka Server,默认为true。eureka.client.register-with-eureka=false#表示是否从Eureka Server获取注册信息,默认为true。eureka.client.fetch-registry=false#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址, 多个地址可使用,分隔。eureka.client.serviceUrl.defaultZone=http://${server.ip}:${server.port}/eureka/logging.level.com.netflix.eureka=OFFlogging.level.com.netflix.discovery=OFF

因为它是一个服务注册中心,自己不需要向自己注册,也不需要中注册中心获取服务,所以需要把这两项设为false:eureka.client.register-with-eureka,eureka.client.fetch-registry

之后,在启动类上面加上注解 @EnableEurekaServer ,运行:

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

在浏览器中输入:http://localhost:8761/ 显示如下页面,就表示 Eureka Server 注册中心就搭建好了:

由于我们还没有注册任何的实例,所以在 Instances currently registered with Eureka 中显示没有可用的实例。

Eureka Client

接下来,写一个 Eureka Client ,向注册中心注册服务。

pom文件如下:

    4.0.0            org.springframework.boot        spring-boot-starter-parent        2.1.6.RELEASE                 com.tsmyk    eureka_client_2    0.0.1-SNAPSHOT    eureka_client_2    Demo project for Spring Boot            1.8        UTF-8        UTF-8        Greenwich.SR1                            org.springframework.cloud            spring-cloud-starter-netflix-eureka-client                            org.springframework.boot            spring-boot-starter-web                            org.springframework.boot            spring-boot-starter-test            test                                                    org.springframework.cloud                spring-cloud-dependencies                ${spring-cloud.version}                pom                import                                                                org.springframework.boot                spring-boot-maven-plugin                        

配置文件 application.properties 的配置如下:

#端口号server.port=8765#服务名spring.application.name=eureka-client-2#注册到eureka中心,获取到配置服务eureka.client.service-url.defaultZone=http://localhost:8761/eureka/#设置实例的ID为ip:porteureka.instance.instance-id=localhost:${server.port}# 心跳时间,即服务续约间隔时间(缺省为30s)eureka.instance.lease-renewal-interval-in-seconds=5# 发呆时间,即服务续约到期时间(缺省为90s)eureka.instance.lease-expiration-duration-in-seconds=10

之后,在启动类加上注解 @EnableDiscoveryClient,运行:

@EnableDiscoveryClient@SpringBootApplicationpublic class EurekaClient2Application {    public static void main(String[] args) {        SpringApplication.run(EurekaClient2Application.class, args);    }}

此时,在浏览器中输入上面的网址:http://localhost:8761/,如下:

此时可以看到,我们的 Eureka-client 已经注册上了,状态为 UP,地址为:locahost:8765.

以上就是一个简单的服务的注册于发现的例子。

Eureka Server 集群

为了保证注册中心的高可用,Eureka Server 注册中心一般需要搭建为集群模式,现在,就来搭建三个Eureka Server注册中心实现集群模式。每个注册中心的 eureka.client.service-url.defaultZone 需要指向其他两个 Eureka Server 注册中心地址。

新建三个Spring项目,分别为三个 Eureka Server 注册中心,代码和上面的一样,只不过配置文件有所不同

第一个Eureka Server 注册中心的配置文件:

spring.application.name=spring-cloud-eureka# 端口server.port=8761eureka.instance.hostname=eureka-server-peer1#表示是否将自己注册到Eureka Server,默认为true。eureka.client.register-with-eureka=true#表示是否从Eureka Server获取注册信息,默认为true。eureka.client.fetch-registry=true#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址, 多个地址可使用,分隔。eureka.client.serviceUrl.defaultZone=http://eureka-server-peer2:8762/eureka/,http://eureka-server-peer3:8763/eureka/logging.level.com.netflix.eureka=OFFlogging.level.com.netflix.discovery=OFF

其中,需要把 eureka.client.register-with-eureka,eureka.client.fetch-registry 设为 true,然后,eureka.client.serviceUrl.defaultZone 指向其他两个注册中心的地址。

第二个Eureka Server 注册中心的配置文件:

spring.application.name=spring-cloud-eureka# 端口server.port=8762eureka.instance.hostname=eureka-server-peer2#表示是否将自己注册到Eureka Server,默认为true。eureka.client.register-with-eureka=true#表示是否从Eureka Server获取注册信息,默认为true。eureka.client.fetch-registry=true#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址, 多个地址可使用,分隔。eureka.client.serviceUrl.defaultZone=http://eureka-server-peer1:8761/eureka/,http://eureka-server-peer3:8763/eureka/#为false,关闭自我保护eureka.server.enable-self-preservation=false#清理间隔, 单位毫秒,默认是60*1000eureka.server.eviction-interval-timer-in-ms=4000logging.level.com.netflix.eureka=OFFlogging.level.com.netflix.discovery=OFF

第三个 Eureka Server 注册中心的配置文件:

spring.application.name=spring-cloud-eureka# 端口server.port=8763eureka.instance.hostname=eureka-server-peer3#表示是否将自己注册到Eureka Server,默认为true。eureka.client.register-with-eureka=true#表示是否从Eureka Server获取注册信息,默认为true。eureka.client.fetch-registry=true#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址, 多个地址可使用,分隔。eureka.client.serviceUrl.defaultZone=http://eureka-server-peer1:8761/eureka/,http://eureka-server-peer2:8762/eureka/logging.level.com.netflix.eureka=OFFlogging.level.com.netflix.discovery=OFF

现在,再写两个 Eureka Clinet 分别向 eureka-server-peer1 和 eureka-server-peer3 进行注册,

第一个 Eureka Clinet 配置文件:

#端口号server.port=8764#服务名spring.application.name=eureka-client-1#注册到eureka中心,获取到配置服务eureka.client.service-url.defaultZone=http://eureka-server-peer1:8761/eureka/#设置实例的ID为ip:porteureka.instance.instance-id=localhost:${server.port}# 心跳时间,即服务续约间隔时间(缺省为30s)eureka.instance.lease-renewal-interval-in-seconds=5# 发呆时间,即服务续约到期时间(缺省为90s)eureka.instance.lease-expiration-duration-in-seconds=10

eureka.client.service-url.defaultZone=http://eureka-server-peer1:8761/eureka/ 表示向第一个中注册中心进行注册。

第二个 Eureka Clinet 配置文件:

#端口号server.port=8765#服务名spring.application.name=eureka-client-2#注册到eureka中心,获取到配置服务#eureka.client.service-url.defaultZone=http://localhost:8761/eureka/eureka.client.service-url.defaultZone=http://eureka-server-peer3:8763/eureka/#设置实例的ID为ip:porteureka.instance.instance-id=localhost:${server.port}# 心跳时间,即服务续约间隔时间(缺省为30s)eureka.instance.lease-renewal-interval-in-seconds=5# 发呆时间,即服务续约到期时间(缺省为90s)eureka.instance.lease-expiration-duration-in-seconds=10

eureka.client.service-url.defaultZone=http://eureka-server-peer3:8763/eureka/ 表示向第三个中注册中心进行注册。

然后在 hosts 文件中加入如下信息:

127.0.0.1 eureka-server-peer1127.0.0.1 eureka-server-peer2127.0.0.1 eureka-server-peer3

现在运行这 5 个项目,浏览器中输入 : http://localhost:8761/,如下所示:

有两个服务已经注册上来了:

注册中心的副本有两个,可用的注册中心也有两个:

当我们把第二个注册中心停掉之后,它就会变为不可用:

当把第二个注册中心停掉之后,它并不会立马变为不可用状态,这是由于Eureka拥有自我保护机制,当其注册表里服务因为网络或其他原因出现故障而关停时,Eureka不会立马剔除服务注册,而是等待其修复。但是可以通过参数来关闭自我保护:

#为false,关闭自我保护eureka.server.enable-self-preservation=false#清理无效节点的时间间隔, 单位毫秒,默认是60*1000eureka.server.eviction-interval-timer-in-ms=4000

上述除了一些常用配置外,Eureka Client 还配置了

eureka.instance.lease-renewal-interval-in-seconds=5eureka.instance.lease-expiration-duration-in-seconds=10

eureka.instance.lease-renewal-interval-in-seconds 表示心跳时间,即服务续约间隔时间(缺省为30s)

eureka.instance.lease-expiration-duration-in-seconds 表示发呆时间,即服务续约到期时间(缺省为90s)

心跳时间的意思就是,客户端需要每隔多少时间向注册中心发下心跳来表明自己还活着,这个时间默认是 30 秒。

发呆时间的意思就是,eureka服务器在接受到实例最后一次发出的心跳后,需要等待多久才可以将此实例删除,这个时间默认是 90 秒。

此外,Eureka Client 还可以配置间隔多少时间去 Eureka Server 注册中心拉取注册信息,这个默认时间是 30 秒,通过以下参数进行配置:

eureka.client.registry-fetch-interval-seconds

到此,关于"Spring Eureka集群的搭建方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

服务 时间 配置 地址 文件 集群 信息 实例 两个 方法 三个 学习 多个 查询服务 端口 UTF-8 保护 查询 接下来 例子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 没有云服务器 服务器sql自动重启怎么回事 计算机网络技术有什么证 关系数据库模式概念 电脑服务器有什么优势 贵州世和阳互联网科技怎么样 蓝色隐士怎么看服务器排队 国内有哪几家云服务器 数据库娱乐丶信任75505 数码宝贝有多少个服务器 网络安全绘画简单 国务院联合印发网络安全审查 树莓派spring服务器 开展网络安全教育活动的报道 计算机网络技术实习日志pdf 深圳华强软件开发有限公司 天龙八部游戏服务器怎么选择 犯了网络安全法会怎么样 机关网络安全教育方案 青浦区电商软件开发答疑解惑 朝阳区信息网络技术服务优点 贵州世和阳互联网科技怎么样 静安区智能软件开发流程 国际网络技术 重庆江北果蔬软件开发 杭州棋牌软件开发培训 阿里服务器怎么部署带宽 网络安全要怎么做 存货软件开发定制落地方案 vscode数据库展示插件
0