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自我保護機制

這裏開啓暴力剔除模式
在這裏插入圖片描述
在這裏插入圖片描述

至此,Springcloud Eureka篇章結束~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章