文章目录
一、Eureka的自我保护机制
1.1 自我保护机制
- 某时刻一个微服务不可用了,eureka不会立即清理,而是会对该微服务的信息进行保存。
- 默认,EurekaServer在一段时间内没有接收到某个微服务的心跳,EurekaServer将会注销该实例(默认90秒),如果是网络拥堵的情况下这就很危险,Eureka通过自我保护机模式来解决这个问题,当EurekaServer节点在短时间内丢失过多客户端时,那么这个节点就会进入自我保护模式,一旦进入该模式,EurekaServer就会保护服务注册表中的信息,不会删除服务注册表中的信息。当它收到的心跳数重新恢复到阀值以上时,(比如网络故障恢复后),该EurekaServer节点会自动退出自我保护模式。
1.2 禁用自我保护模式
eureka.server.enable-self-preservation=false
二、服务发现
2.1 概念
对于注册进eureka里面的服务,可以用通过服务发现来获得该服务的信息。
2.2 主启动类添加注解
- 向注册中心注册服务
@EnableDiscoveryClient
2.3 controller层
- 添加到提供服务的一端
- controller层
@RestController
public class RubbishControler {
@Autowired
DiscoveryClient discoveryClient;
@RequestMapping("/get/discovery")
public Object discovery(){
List<String> services = discoveryClient.getServices();
System.out.println("出现的服务的名称" + services);
List<ServiceInstance> service = discoveryClient.getInstances("serverice_name");
for(ServiceInstance serviceInstance : service){
System.out.println(serviceInstance.getHost() + " " + serviceInstance.getInstanceId() + " " + serviceInstance.getPort() + " " + serviceInstance.getUri());
}
return discoveryClient;
}
}
- 需要倒入的包
import org.springframework.cloud.client.discovery.DiscoveryClient;
2.4 运行结果
- web端
* idea端
2.5 custom模块发现的实现
- 返回值是Object类型的
@RequestMapping("/custom/get/discovery")
public Object getDiscovery(){
return restTemplate.getForObject(URL + "/get/discovery",Object.class);
}