SpringCloud系列:服务注册与发现组件-Eureka(下)

作者的其他平台:

| CSDN:blog.csdn.net/qq_41153943

| 掘金:juejin.cn/user/651387…

| 知乎:www.zhihu.com/people/1024…

| GitHub:github.com/JiangXia-10…

本文一共3304字,预计阅读9分钟

前言

前面说到eureka组件主要包含两个部分:eureka server 和 eureka client,eureka server前面文章SpringCloud系列:服务注册与发现组件-Eureka(上)介绍了如何开发eureka server作为服务注册中心,今天在上篇文章的基础上继续eureka的学习,开发eureka client。其实这里的eureka client就是基于业务拆分出来的一个个微服务。

实战开发

本文的项目基础是在上一篇的项目基础之上,具体的可以参考SpringCloud系列:服务注册与发现组件-Eureka(上)。并且最后项目的源码会同步到github上,地址放在文章最后,可以下载使用。

首先和eureka server一样,还需要创建一个springboot项目,作为client应用。项目工程结构如下:

图片

接着同样需要引入springboot相关依赖:

<dependencies>
        <dependency>
            <!--引入springboot相关依赖-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入spring-cloud-netflix-eureka-client依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
复制代码

然后新增application.properties文件,新增相关配置:

#指定服务端口
server.port=8081
#指定服务名称,唯一标识,服务名不能出现下划线,如果不指定名称,显示的就是unknown
spring.application.name=eurekaclient
#指定服务注册中心的地址,暴露服务地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
复制代码

接着新增入口类,并使用@enableeurekaclient注解,表示当前应用是一个eureka server服务注册的客户端进行服务注册:

@SpringBootApplication
//当前应用作为一个客户端进行服务注册
@EnableEurekaClient
public class SpringCloudEurekaClient {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaClient.class,args);
    }
}
复制代码

以上步骤和eureka server项目的创建过程基本一样,除了部分具体内容有差别。

然后分别按照顺序先启动server项目,然后启动client项目:

图片

图片

浏览器地址栏输入:

http://localhost:8761/
复制代码

可以在注册中心管理界面中发现EUREKACLIENT注册的实例,表明EUREKACLIENT已经注册到了注册中心中:

图片

但是可以发现上面有个红色的信息,根据直觉判断应该是什么安全提示信息,具体如下:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
复制代码

这句话的翻译过来的意思就是:Eureka可能会声明已经不存在的实例。刷新数小于阈值时,为了安全起见不会剔除过期实例。

这里需要先说明下Eureka的默认阈值是85%。

也就是说比如目前有10个微服务,只有8个有心跳反应时,(8/10=80%<85%)Eureka就会开启保护机制,过期的实例不会立马剔除,并且出现这个紧急警告。在搭建Eureka Server时,比如我们搭建了2个Eureka Server,并且禁止自注册,Eureka Server自身算一个服务,那么其中任意一个Eureka,只能获得一个心跳,1/2=50%。那么也会出现这个警告。这种情况如果未禁止自注册的话是不会出现的。

那么当不想有这个红色警告时,可以在server端的application.properties文件中配置:

eureka.server.enable-self-preservation=false
复制代码

启动项目,则红色警告消失了:

图片

但是出现下述警告:

THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
复制代码

所以官方并不建议在生产环境下关闭自我保护机制。

再来说下什么是eureka的自我保护机制。在默认的情况下,如果eureka server在一定的时间内(默认时间是90s)没有接收到某个服务实例的心跳,eureka server就会移除该实例。但是在网络分区的发生故障时,微服务和eureka server之间是无法正常通信,但是微服务本身是能够正常通信的,此时就不应该移除该实例,所以引入了自我保护机制。eureka server在运行期间会统计心跳失败的比例,如果在15分钟内低于85%,就会将这些实例保护起来,让这些实例不会过期被清理。所以自我保护机制是一种针对网络异常波动的保护措施,能够使得eureka集群更加健壮、稳定运行。下图是github官网对于自我保护机制的解释。

图片

下图是eureka server默认接受心跳的最大时间,默认是90s和客户端多久向eureka server发送一次心跳,默认是30s。可以通过appliation.properties文件进行修改:

图片

还可以配置超时清除实例的时间:

#超时3s自动清除
eureka.server.eviction-interval-timer-in-ms=3000
复制代码

目前官网说明对于eureka 的2.0版本已经停止更新维护,所以不建议使用2.0版本,使用1.0版本更加稳定。

图片

总结

以上就是如何使用eureka作为微服务注册和服务发现的学习!如有任何问题或者不正确的地方欢迎指出讨论!

项目源码地址:

github.com/JiangXia-10…

eureka官网github地址:

github.com/Netflix/eur…

相关推荐

猜你喜欢

转载自blog.csdn.net/qq_41153943/article/details/125837657
今日推荐