Spring Cloud 學習筆記 ——Sleath、Zipkin、RabbitMQ、ElasticSearch、Stream 搭建鏈路專案

廁所博士發表於2020-11-19

17.2 實踐

Spring Cloud 學習筆記 —— Spring Cloud Zipkin 簡介和安裝的基礎上,我們建立一個專案,來在專案中實現 Sleath、Zipkin、RabbitMQ 的鏈路追蹤

  • 1.建立一個 Spring Boot 專案 zipkin01,新增 Web、Sleath、Zipkin、RabbitMQ、Stream依賴,Stream 依賴是方便傳送到訊息佇列
    在這裡插入圖片描述
    建立完專案,配置 application.properties
spring.application.name=zipkin03
# 開啟鏈路追蹤
spring.sleuth.web.client.enabled=true
# 配置採用比例,預設是 0.1,這裡方便測試改為 1,即 100%
spring.sleuth.sampler.probability=1
# 配置 zipkin 地址
spring.zipkin.base-url=http://192.168.99.100:9411
# 開啟 zipkin
spring.zipkin.enabled=true
# 設定訊息傳送的型別
spring.zipkin.sender.type=rabbit

# rabbitmq 配置
spring.rabbitmq.host=192.168.99.100
spring.rabbitmq.port=32773
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

如上配置 ip 埠,參考 docker 中的顯示:
在這裡插入圖片描述
建立一個測試的 Controller

@RestController
public class HelloController {
    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
    @GetMapping("/hello")
    public String hello(String name){
        logger.info("zipkin03-hello");
        return "hello" + name;
    }
}
  • 2.建立一個跟 zipkin03 一樣的專案 zipkin04
    依賴一樣,配置 application.properties 中新增 server.port 屬性和更改 spring.application.name 屬性
spring.application.name=zipkin04
server.port=8081
# 開啟鏈路追蹤
spring.sleuth.web.client.enabled=true
# 配置採用比例,預設是 0.1,這裡方便測試改為 1,即 100%
spring.sleuth.sampler.probability=1
# 配置 zipkin 地址
spring.zipkin.base-url=http://192.168.99.100:9411
# 開啟 zipkin
spring.zipkin.enabled=true
# 設定訊息傳送的型別
spring.zipkin.sender.type=rabbit

# rabbitmq 配置
spring.rabbitmq.host=192.168.99.100
spring.rabbitmq.port=32773
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

然後這個基礎上,在啟動類上新增 RestTemplate 的 Bean

@SpringBootApplication
public class Zipkin04Application {

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

    @Bean
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

建立一個測試的 Controller

@RestController
public class HelloController {
    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
        
    @Autowired
    RestTemplate restTemplate;
    @GetMapping("/hello")
    public void hello(){

        String s = restTemplate.getForObject("http://localhost:8080/hello?name={1}", String.class, "javaboy");
        logger.info(s);
    }
}
  • 3.啟動 zipkin03 和 zipkin04 然後訪問 zipkin04 的 /hello 介面
    在這裡插入圖片描述
    zipkin04的:鏈路[zipkin04,a1c7cc0516de881b,a1c7cc0516de881b]
    在這裡插入圖片描述
    zipkin03的:[zipkin03,a1c7cc0516de881b,2d5a409c88c1dc13]
    [zipkin04,a1c7cc0516de881b,a1c7cc0516de881b]和[zipkin03,a1c7cc0516de881b,2d5a409c88c1dc13]就好像從前一個傳遞過來一樣
    觀察 zipkin 管理頁面
    在這裡插入圖片描述
    開啟
    在這裡插入圖片描述
    Span ID:a1c7cc0516de881b Parent ID:None
    在這裡插入圖片描述
    Span ID:04dfe8955136bd89 Parent ID:a1c7cc0516de881b
    在這裡插入圖片描述
    Span ID:2d5a409c88c1dc13 Parent ID:04dfe8955136bd89
    總計:
    Span ID:a1c7cc0516de881b Parent ID:None
    Span ID:04dfe8955136bd89 Parent ID:a1c7cc0516de881b
    Span ID:2d5a409c88c1dc13 Parent ID:04dfe8955136bd89
    可以看到其實有 3 個 spanId :
    第一個是請求進入 zipkon04 服務時;
    第二個是從 zipkin04 到 RestTemplate 呼叫產生的 ;
    第三個是從 RestTemplate 到 zipkon03 產生的;
    這就是 zipkin 展示鏈路的過程,跟 kibana 的功能類似;
  • 4.所展示的內容就是 es-head 中的資料內容
    在這裡插入圖片描述
    還可以觀看 RabbitMQ,它有一個佇列就 zipkin
    在這裡插入圖片描述
    這就是 Sleuth、zipkin、RabbitMQ、ElasticSearch 搭建的日誌檢視功能,首先 Sleuth 收集日誌,傳送給 RabbitMQ 佇列,RabbitMQ 佇列傳送給 ElasticSearch 儲存,然後 Zipkin 展示 ElasticSearch 中的內容,以人性化的可視頁面顯示呼叫鏈路過程

相關文章