作者的其他平台:
| 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相关依赖:
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
复制代码
然后新增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…
SpringCloud系列:服务注册与发现组件-Eureka(上)
zookeeper教程:入门篇
SpringCloud:搭建Nacos服务以及服务发现
SpringBoot开发Restful风格的接口实现CRUD功能
Spring注解(六):Bean的生命周期中自定义初始化和销毁方法的四种方式
SpringBoot系列:MybatisPlus的入门级使用教程(上)
SpringBoot系列:MybatisPlus的入门级使用教程(中)
SpringBoot系列:MybatisPlus的入门级使用教程(下)