欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-13 15:32:23
...

一. actuator微服务信息完善

1.1 在8001与8002项目中分别添加

instance:
    instance-id: payment8001

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

改完后我们的自定义服务名称就暴露出来了
Springcloud-Alibaba 〖四〗actuator微服务信息完善 添加 DiscoveryClient Eureka自我保护理论知识

1.2 点开payment8001找到 /health 路径

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

1.3 配置访问路径可以访问IP

Springcloud-Alibaba 〖四〗actuator微服务信息完善 添加 DiscoveryClient Eureka自我保护理论知识
当鼠标放到刚配置的主机名上时,左下角就会显示主机的IP
Springcloud-Alibaba 〖四〗actuator微服务信息完善 添加 DiscoveryClient Eureka自我保护理论知识

二. 添加 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 调用该服务

Springcloud-Alibaba 〖四〗actuator微服务信息完善 添加 DiscoveryClient Eureka自我保护理论知识
控制台打印出了相关信息
Springcloud-Alibaba 〖四〗actuator微服务信息完善 添加 DiscoveryClient Eureka自我保护理论知识

三. Eureka自我保护理论知识

概述: 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护,一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。
一句话: 某时刻某一个微服务不可用了,Eureka不会立刻清理,依旧会对该微服务的信息进行保存。
Springcloud-Alibaba 〖四〗actuator微服务信息完善 添加 DiscoveryClient Eureka自我保护理论知识

如果在Eureka Server的首页看到以上这段提示,则说明Eureka进入了保护模式。属于CAP里面的AP分支。

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

3.1 关闭Eureka自我保护机制

这里开启暴力剔除模式
Springcloud-Alibaba 〖四〗actuator微服务信息完善 添加 DiscoveryClient Eureka自我保护理论知识
Springcloud-Alibaba 〖四〗actuator微服务信息完善 添加 DiscoveryClient Eureka自我保护理论知识

至此,Springcloud Eureka篇章结束~