1. 程式人生 > 實用技巧 >SpringCloud學習筆記【三】:Actuator微服務資訊完善+Discovery獲取註冊資訊

SpringCloud學習筆記【三】:Actuator微服務資訊完善+Discovery獲取註冊資訊

目錄

本篇要點

  • 介紹Eureka管理介面主機名和訪問ip資訊提示修改。
  • 介紹獲取當前註冊中心服務列表,以及獲取每個服務的例項列表的方法。

Actuator微服務資訊完善

前提

除了eureka依賴之外,確保已經引入以下依賴:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

主機名稱:服務名稱修改

我們回顧一下:當我們訪問Eureka的後臺管理頁面時,註冊的客戶端的Status是這樣的:筆記本+服務名+埠:

如果我們有特殊的定製需求,其實Status的資訊可以通過eureka.instance.instance-id自定義:

eureka:
  client:
    #表示是否將自己註冊進EurekaServer預設為true。
    register-with-eureka: true
    #是否從EurekaServer抓取已有的註冊資訊,預設為true。單節點無所謂,叢集必須設定為true才能配合ribbon使用負載均衡
    fetchRegistry: true
    service-url:
      #單機版
      defaultZone: http://localhost:7001/eureka
  instance:
    instance-id: payment8002

修改結果顯示如下:

顯示IP地址

在啥也沒有配置的時候,我們需要點選Status中的服務連結,才會顯示諸如:http://desktop-qfk0mbg:8002/actuator/info的連結地址,如果我們想讓滑鼠懸浮顯示IP地址,我們也是有辦法的:

eureka:
  #..省略
  instance:
    instance-id: payment8001
    #訪問路徑可以顯示IP地址
    prefer-ip-address: true

再次測試,url變為:http://172.28.11.140:8002/actuator/info

Eureka服務發現

對於註冊進Eureka的微服務,可以通過服務發現來獲得該服務的資訊,這裡以Payment8001模組為例演示具體步驟。

注入DiscoveryClient,獲取資訊

@Slf4j
@RestController
public class PaymentController {

    @Resource
    private DiscoveryClient discoveryClient;

    @GetMapping("/payment/discovery")
    public Object discovery(){
        Map<String,Object> map = new HashMap<>();
        List<String> services = discoveryClient.getServices();
        services.forEach(log::info);
        map.put("獲取的服務列表",services);
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        List<String> instanceList = new ArrayList<>();
        instances.forEach(x -> {
            log.info(x.getServiceId() + "\n" + x.getHost() + "\n" + x.getPort() + "\n" +  x.getUri());
            instanceList.add("ServiceId : " + x.getServiceId() + " Host : " + x.getHost() + " Port : " + x.getPort() + " uri : " + x.getUri());
        });
        map.put("服務cloud-payment-service上的例項",instanceList);
        return map;
    }
}

主程式上加上@EnableDiscoveryClient

@EnableEurekaClient
@SpringBootApplication
@EnableDiscoveryClient
public class Payment8001Application {

    public static void main(String[] args) {
        SpringApplication.run(Payment8001Application.class,args);
    }
}

測試

訪問:http://localhost:8001/payment/discovery

我們可以成功獲得服務列表資訊,以及某個服務的所有例項資訊。

原始碼下載

本系列文章為《尚矽谷SpringCloud教程》的學習筆記【版本稍微有些不同,後續遇到bug再做相關說明】,主要做一個長期的記錄,為以後學習的同學提供示例,程式碼同步更新到Gitee:https://gitee.com/tqbx/spring-cloud-learning,並且以標籤的形式詳細區分每個步驟,這個系列文章也會同步更新,如果內容有誤,還望評論區批評指正。