Spring Cloud— 五、注册中心Eureka

5.1、为Eureka添加用户认证

在前面的实例中,我们可以看到我们需要登陆即可访问到Eureka服务,这样其实是不安全的。

接下来,我们为Eureka添加用户认证。

第一步,为springcloud-demo-eureka添加安全认证依赖:

<!--安全认证-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

第二步,增加application.properties配置文件:


application.properties.png

第三步,重新启动Eureka服务进行测试:


测试结果.png

输入正确的用户名密码即可登陆。
这是,服务提供者注册到Eureka时会报错,所以需要在服务注册时也需要设置用户名和密码。

5.2服务注册时设置账户信息

服务注册到有认证需求的注册中心时,需要设置如下信息:
http://User:Password@127.0.0.1:8888/eureka/

application.properties.png

重新启动测试,可以看到已经注册到了Eureka服务注册中心。

5.3、Eureka的自我保护模式

如图,当前Eureka进入了自我保护模式。


自我保护模式.png

默认情况下,如果Eureka Server在一定时间内没有接受到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康得,此时本不应该注销这个微服务。
Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表的信息,不再删除服务注册表中的数据(也就是不会注销任务微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。

综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有的微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。

所以,一般进入自我保护模式,无需处理。如果,需要禁用自我保护模式,只需要在application配置文件中添加配置即可
application.properties.png

重新启动服务查看效果:


效果.png

提示,如果禁用自我保护模式,在网络通信故障下会出现问题。

5.4、Eureka的高可用

前面得测试,我们会发现,Eureka服务是一个单点服务,在生产环境就会出现单点故障,为了确保Eureka服务得高可用,我需要搭建Eureka服务的集群。

搭建Eureka集群非常简单,只要启动多个Eureka服务并且让这些服务之间彼此进行注册即可实现。

第一步,修改springcloud-demo-eureka的application.properties文件:
application.properties.png

第二步:修改配置文件,再启用一个Eureka服务,进行启动测试:
application.properties.png

测试结果:
测试结果.png
测试结果2.png

可以看到,2个Eureka服务进行了彼此注册。

说明:启动两个spring boot项目第一个可以用ieda启动,第二个可以用命令mvn spring-boot:run,当然还有其他的很多方式。

5.5、将服务注册到Eureka集群

服务注册到Eureka集群时,可以指定多个,也可以指定一个Eureka服务(因为Eureka服务集群间彼此互联)。

修改springcloud-demo-item的application配置文件:

 #Eureka服务端与Eureka客户端交互地址
eureka.client.serviceUrl.defaultZone=http://zuo:123456@127.0.0.1:8888/eureka/,http://zuo:123456@127.0.0.1:9999/eureka/

重启,测试:
结果1.png
结果2.png

可以通过停止Eureka服务进行测试,结果会发现集群是高可用。

5.6、指定实例的IP地址与实例ID

在服务的提供者配置文件中可以指定ip地址,如下:

#指定此实例ip
eureka.instance.ip-address=127.0.0.1
#指定此实例ID
eureka.instance.instance-id=${spring.application.name}:${server.port}

Spring Cloud—一、微服务架构
Spring Cloud—二、Spring Cloud简介
Spring Cloud—三、使用Spring Cloud实现微服务
Spring Cloud—四、Spring Cloud快速入门
Spring Cloud—五、注册中心Eureka
Spring Cloud—六、使用Ribbon实现负载均衡
Spring Cloud—七、容错保护:Hystrix
Spring Cloud—八、使用Feign实现声明式的Rest调用
Spring Cloud—九、服务网关Spring Cloud Zuul
Spring Cloud—十、使用Spring Cloud Config统一管理微服务
Spring Cloud—十一、使用Spring Cloud Bus(消息总线)实现自动更新

demo源码

推荐阅读更多精彩内容