基于eureka的服务治理demo实现

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/rb601100136/article/details/84848945

    读完《从0开始的微服务架构》之后一直尝试一下微服务是怎么运行的,再加上对eureka的服务注册比较感兴趣,因此尝试使用springboot来尝试eureka的服务治理。

 

新建一个springboot项目,在pom.xml文件中添加如下依赖:

 

注意:我的springboot版本是1.5.4,我默认生成的版本是2.0.4的,与上面的Dalston.SR1的版本不一致,所以启动会报错,因此换成了1.5.4。

 

然后在项目的主函数中前加入@EnableEurekaServer注解,这个注解是用来开启服务注册中心。

 

接着在application.propertites中配置端口号,并且不向服务中心注册自己,因为此服务作为eureka的服务端。

 

然后启动项目访问localhost:3333可以看到eruaka的注册中心:

 

我们可以看到在DS Replicas中还没任何euraka客户端注册到这里来。

 

 

有了服务端之后,我们再新建一个springboot项目,作为eureka的客户端:在主函数的前面添加 @EnableEurekaClient 注解。

 

然后在application.propertites文件中配置服务名,和注册中心的地址(就是我们上一步启动的eureka服务端地址):

 

然后我写了一个Controller用以访问这个客户端:

 

接着访问http://localhost:8080/hello 可以看到页面返回"hello service"。

 

然后我们回头看一下http://localhost:3333/ 的注册中心的页面中已经获得了一个注册信息

 

 

接着我改变了客户端springbootdemo的端口号

 

 

然后访问注册中心发现现在有了hello-service有了两个状态,一个是开始的默认8080端口号,一个是现在6666端口号。

 

 

然后访问localhost:6666/hello访问不到,很奇怪,所以我又把springbootdemo工程的端口号改为8083,注册中心出现三个状态

 

访问localhost:8083/hello成功,所以猜想可能客户端只认80端口。

 

书中提到当服务端的注册中心没有接收到客户端的定时心跳时,超过一定次数(一般是三次),变会把断掉的客户端地址信息从注册中心移除,但是我过了好一会,再次访问注册中心时,发现并没有将8080端口和6666端口移除,我觉的很奇怪。于是查阅了资料,发现:

eureka有自我保护的机制,即如果在15分钟内超过85%的客户端都没有正常心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server进入自我保护机制。此时会出现以下几种情况:

1.Eureka Server不再从注册列表移除长时间没有收到心跳而因过期的服务。

2.Eureka Server仍然能够接受新服务的注册和查询请求,但是不会同步到其他节点上,保证当前节点可用。

3.当网络稳定时,当前Eureka Server新的注册信息会被同步到其他节点中。

 

 

所以我猜想我的情况是出现了自我保护机制,注册列表不会移除过期服务。所以我在服务端的application.propertites加了以下配置:

 

然后在客户端加入如下配置:

 

这样一来再次测试,发现注册中心可以移除没有心跳的服务,并且在注册中心出现红字警告:意思是:

自保模式被撤销。这可能无法保护网络/其他问题的情况下失效。

 

 

 

这里我仍然有一个疑惑:85%的客户端没有正常心跳,Eureka才会进入自我保护机制,我想当与注册了三个服务,但是只有两个断掉了,只有66.7%,为什么也会进入自我保护,或是有其他原因,还需要验证。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

展开阅读全文

没有更多推荐了,返回首页