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自我保護機制
這裏開啓暴力剔除模式