Springcloud-Alibaba 〖四〗actuator微服务信息完善 添加 DiscoveryClient Eureka自我保护理论知识

一. 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自我保护机制

这里开启暴力剔除模式
在这里插入图片描述
在这里插入图片描述

扫描二维码关注公众号,回复: 10080440 查看本文章

至此,Springcloud Eureka篇章结束~

发布了82 篇原创文章 · 获赞 72 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/kingtok/article/details/105016708