SpringCloud学习笔记 (8)

该保护机制的目的是避免网络连接故障,在发生网络故障时,微服务和注册中心之间无法正常通信,但服务本身是健康的,不应该注销该服务,如果eureka因网络故障而把微服务误删了,那即使网络恢复了,该微服务也不会重新注册到eureka server了,因为只有在微服务启动的时候才会发起注册请求,后面只会发送心跳和服务列表请求,这样的话,该实例虽然是运行着,但永远不会被其它服务所感知。所以,eureka server在短时间内丢失过多的客户端心跳时,会进入自我保护模式,该模式下,eureka会保护注册表中的信息,不在注销任何微服务,当网络故障恢复后,eureka会自动退出保护模式。自我保护模式可以让集群更加健壮。

但是我们在开发测试阶段,需要频繁地重启发布,如果触发了保护机制,则旧的服务实例没有被删除,这时请求有可能跑到旧的实例中,而该实例已经关闭了,这就导致请求错误,影响开发测试。所以,在开发测试阶段,我们可以把自我保护模式关闭,只需在eureka server配置文件中加上如下配置即可:eureka.server.enable-self-preservation=false【不推荐关闭自我保护机制】

详细内容可以参考下这篇博客内容:https://blog.csdn.net/wudiyong22/article/details/80827594

4. 注册进来的微服务,获取一些消息(团队开发会用到)

**DeptController.java **新增方法

/** * DiscoveryClient 可以用来获取一些配置的信息,得到具体的微服务! */ @Autowired private DiscoveryClient client; /** * 获取一些注册进来的微服务的信息~, * * @return */ @GetMapping("/dept/discovery") public Object discovery() { // 获取微服务列表的清单 List<String> services = client.getServices(); System.out.println("discovery=>services:" + services); // 得到一个具体的微服务信息,通过具体的微服务id,applicaioinName; List<ServiceInstance> instances = client.getInstances("SPRINGCLOUD-PROVIDER-DEPT"); for (ServiceInstance instance : instances) { System.out.println( instance.getHost() + "\t" + // 主机名称 instance.getPort() + "\t" + // 端口号 instance.getUri() + "\t" + // uri instance.getServiceId() // 服务id ); } return this.client; }

image-20210201153106921

主启动类中加入@EnableDiscoveryClient 注解

@SpringBootApplication // @EnableEurekaClient 开启Eureka客户端注解,在服务启动后自动向注册中心注册服务 @EnableEurekaClient // @EnableEurekaClient 开启服务发现客户端的注解,可以用来获取一些配置的信息,得到具体的微服务 @EnableDiscoveryClient public class DeptProvider_8001 { ... }

结果如图:

image-20210201153133431

5.4 Eureka:集群环境配置

image-20210201153151050

1.初始化

新建springcloud-eureka-7002、springcloud-eureka-7003 模块

1.为pom.xml添加依赖 (与springcloud-eureka-7001相同)

<!--导包~--> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server --> <!--导入Eureka Server依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--热部署工具--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>

2.application.yml配置(与springcloud-eureka-7001相同)

server: port: 7003 # Eureka配置 eureka: instance: hostname: localhost # Eureka服务端的实例名字 client: register-with-eureka: false # 表示是否向 Eureka 注册中心注册自己(这个模块本身是服务器,所以不需要) fetch-registry: false # fetch-registry如果为false,则表示自己为注册中心 service-url: # 监控页面~ # 重写Eureka的默认端口以及访问路径 --->:7001/eureka/ defaultZone: ${eureka.instance.hostname}:${server.port}/eureka/

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssppz.html