Springcloud-Alibaba 〖四〗actuator微服务信息完善 添加 DiscoveryClient Eureka自我保护理论知识
程序员文章站
2022-06-13 15:32:23
...
Springcloud-Alibaba 〖四〗
一. actuator微服务信息完善
1.1 在8001与8002项目中分别添加
instance:
instance-id: payment8001
改完后我们的自定义服务名称就暴露出来了
1.2 点开payment8001找到 /health 路径
安全检查正常
1.3 配置访问路径可以访问IP
当鼠标放到刚配置的主机名上时,左下角就会显示主机的IP
二. 添加 DiscoveryClient 发现微服务
2.1 修改8001项目controller层
package com.atguigu.springcloud.controller;
import com.atguigu.springcloud.entities.CommonResult;
import com.atguigu.springcloud.entities.Payment;
import com.atguigu.springcloud.service.PaymentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@Resource
private DiscoveryClient discoveryClient;
@Resource
private PaymentService paymentService;
@PostMapping(value = "/payment/create")
public CommonResult create(@RequestBody Payment payment){
int result = paymentService.create(payment);
log.info("*******插入结果为: "+result);
if(result>0){
return new CommonResult(200,"插入数据库成功"+"机器端口号为:"+serverPort,result);
}else{
return new CommonResult(444,"插入数据库失败"+"机器端口号为:"+serverPort,null);
}
}
@GetMapping(value = "/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") Long id){
Payment paymentById = paymentService.getPaymentById(id);
log.info("*********查找结果为: "+paymentById);
if(paymentById!=null){
return new CommonResult(200,"查找成功: "+"机器端口号为:"+serverPort,paymentById);
}else{
return new CommonResult(444,"查找为空,查找ID为: "+id+"机器端口号为:"+serverPort,null);
}
}
@GetMapping(value = "/payment/discovery")
public Object discovery(){
List<String> services = discoveryClient.getServices();
for (String service : services) {
log.info("********服务名称*****"+service);
}
List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
for (ServiceInstance instance : instances) {
log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
}
return this.discoveryClient;
}
}
2.2 调用该服务
控制台打印出了相关信息
三. Eureka自我保护理论知识
概述: 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护,一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。
一句话: 某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对该微服务的信息进行保存。
如果在Eureka Server的首页看到以上这段提示,则说明Eureka进入了保护模式。属于CAP里面的AP分支。
3.1 关闭Eureka自我保护机制
这里开启暴力剔除模式
至此,Springcloud Eureka篇章结束~
上一篇: Springboot日志-简单总结
下一篇: php 入门简单配置