irpas技术客

SpringCloud 使用 Eureka,一文总结(持续更新)_仅此而已__springcloud中eureka的使用

大大的周 502

SpringCloud 使用 Eureka,一文总结

文章目录 SpringCloud 使用 Eureka,一文总结2. Get Started2.1. 创建Eureka服务器2.2 创建 Eureka 客户端 3. Eureka Server的高可用部署4. Eureka的元数据4.1 元数据介绍4.2 查看元数据 5. Eureka的自我保护模式6.Eureka的健康检查

2. Get Started 2.1. 创建Eureka服务器

创建一个普通的 SpringBoot 项目,加入 eureka-server 的依赖

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

注意版本要和 SpringBoot 的版本有支持关系。可以在 https://spring.io 官网的 SpringCloud 板块查看。

修改配置文件 application.properties

server.port=8761 spring.application.name=EUREKA-SERVER eureka.instance.hostname=127.0.0.1 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

访问 http://127.0.0.1:8761 可以看到以下界面,证明搭建成功。

2.2 创建 Eureka 客户端

创建一个普通的 SpringBoot 项目,然后加入 eureka-client 的依赖。

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>3.0.3</version> </dependency>

注意版本要和 SpringBoot 的版本有支持关系。可以在 https://spring.io 官网的 SpringCloud 板块查看。 在配置文件 application.properties 中添加以下配置

server.port=8081 spring.application.name=EUREKA-CLIENT-1 # eureka-server的地址 eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka

启动成功之后,访问 eureka-server 的 主机+端口号,此处为 : http://127.0.0.1:8761,看到以下界面,代表注册成功。 可以看到关键信息:应用名、可用AZ数量,状态等信息。 声明:

在 Spring Cloud Edgware 版本之后,不需要在配置类上添加 @EnableEurekaClient 或者 @EnableDiscoveryClient 注解,默认自动注册。可以通过 spring.cloud.service-registry.auto-registration.enable=false 或者 @EnableDiscoveryClient(autoRegistry = false) ,禁用默认注册。在Eureka服务器的配置中,添加 eureka.instance.prefer-ip-address=true 表示将自己的 ip 注册到 Eueka-Server 上。 3. Eureka Server的高可用部署

Eureka Server 可以通过运行多个示例,并且相互注册的方式,实现集群高可用部署。 Eureka Server 会彼此增量同步信息,最终保持所有节点一致。 节点之间相互注册是默认行为,只需要把 eureka.client.register-with-eureka=false 和 eureka.client.fetch-registry=false 配置去掉,然后在 eureka.client.serviceUrl.defaultZone 设置成为别的节点的 Eureka 地址就可以。

4. Eureka的元数据 4.1 元数据介绍

Eureka的元数据分为两种:标准元数据 和 自定义元数据。 标准元数据是指 主机名、IP地址、端口号、状态页和健康检查等信息。这些信息都会发布在服务注册表中,用于服务之间的调用。 自定义元数据可以使用 eureka.instance.metadataMap 去自定义key和value(会保存在 EurekaInstanceConfigBean)。自定义元数据也可以在远程客户端中访问,但是一般不会改变客户端的行为(除非自己根据自定义元数据做特定的开发)。

4.2 查看元数据

第一种方式,通过 DiscoveryClient 的对象在程序中获取: 在程序中注入 DiscoveryClient 的对象,然后通过 DiscoveryClient.getInstances("serviceId") 方法,将会返回这个微服务ID下面的所有实例信息,返回类型 List<ServiceInstance> 。

第二种方式,通过 RESTful 接口,用GET方法访问 $(eureka.client.serviceUrl.defaultZone)/apps/serviceId,可以看到这个微服务ID下面的所有实例的XML信息。

5. Eureka的自我保护模式

当 Eureka Server 出现下面的红字,代表进入自我保护模式。 当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,Eureka Server就会进入自我保护模式。 短时间内丢失过多客户端,就认为发生了网络分区。 一旦进入此模式,Eureka Server就会保护服务注册表中的信息,不会再删除数据(不注销微服务)。 当网络故障恢复之后,会自动退出保护模式。 自我保护模式是一种应对网络异常的安全保护措施,它的思想是:宁可保住所有的微服务(健康+不健康),也不会注销任何健康的微服务。

在人群中,无法区分好人坏人的时候,宁愿暂时保住全部的人,也不给机会杀任何一个好人。

自我保护模式,让Eureka集群更加健壮稳定。

6.Eureka的健康检查

Eureka Server 和 Eureka Client 通过心跳定时通信,决定了微服务的状态,UP还是DOWN。 如果Eureka Server超过90s没有收到某个微服务的心跳,就会把它注销。(进入保护模式就不注销) 这种机制只是二者连接正常,不能反映程序的细节健康状态,例如:微服务的数据源出问题。 可以通过 SpringBoot Actuaor 的 health 端点做健康检查,只需配置 eureka.client.healthcheck.enable=true,如果想自定义更细粒度的检查,可以自己实现 com.netflix.appinfo.HealthCheckHandler 方法。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #springcloud #使用 #Eureka一文总结2 #get #Started21 #springboot