spring cloud eureka:
eureka 用以服务发现、服务注册,比较流行的有consul(后面再介绍)
eureka介绍:
eureka为netflix开源软件,分为三个部分:
-
-
eureka服务:用以提供服务注册、发现,已一个war的形式提供
-
eureka-server: 相对client端的服务端,为客户端提供服务,通常情况下为一个集群
-
eureka-client:客户端,通过向
eureka服务
发现注册的可用的eureka-server,向后端发送请求
-
spring cloud eureka
分为两部分
-
- @EnableEurekaClient: 该注解表明应用既作为eureka实例又为eureka client 可以发现注册的服务
- @EnableEurekaServer: 该注解表明应用为eureka服务,有可以联合多个服务作为集群,对外提供服务注册以及发现功能
eureka搭建:
为了更好的演示服务端与客户端,我采用两个项目进行对比演示,先创建服务端在创建客户端:(不要急,一步一步来)
服务端的创建:
第一步:创建spingboot2.0的项目,项目的pom文件如下:springcloud版本介绍
第二步:在启动类上添加注解:@EnableEurekaServer 让enreka生效
第三步:配置文件:application.yml
第四步:启动测试:
注意:我把registerWithEureka改为true,再看一下:
到这,服务端的我基本介绍完了,注意点我也写出来了,下面我们一起看客户端:
客户端的创建:
第一步:引入pom文件:
第二步:添加客户端注解:@EnableEurekaClient
第三步:配置文件(重要,往那个注册中心注册服务就在这配置)
第四步:写个接口测试一下:
第五步:启动服务端和客户端即可:
测试客户端接口:
到这客户端与服务端都演示完了
enreka遇到问题:
1>上面演示过程中我是先启动服务端再启动客户端,演示正常,那如果我先启动客户端,在启动服务端会怎样呢? ----这是会报错的,如下:
这是因为客户端在启动时就会向注册服务端发送心跳,但是此时服务端没启动,所以会报找不到服务端,等到服务端启动这个错就会消失。
2>客户端停止,会立即从服务端消失吗?
不会的,在下一个心跳到达之前不会消失 默认是一分钟
eureka.server.evictionIntervalTimerInMs=5000 但是可以在配置文件中设置,驱除下线的时间
3>红字提醒
系统在三种情况下会出现红色加粗的字体提示:
1.在配置上,自我保护机制关闭
RENEWALS ARE LESSER THAN THE THRESHOLD. THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
2.自我保护机制开启了
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.
3.在配置上,自我保护机制关闭了,但是一分钟内的续约数没有达到85% , 可能发生了网络分区,会有如下提示
THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.