首頁 > Java > java教程 > 主體

spring-cloud-sleuth+zipkin追蹤服務實作(二)

巴扎黑
發布: 2017-06-26 11:09:16
原創
2006 人瀏覽過

1. 簡述

在上一節《spring-cloud-sleuth+zipkin追蹤服務實作(一)》中,我們使用microservice-zipkin-server、microservice-zipkin-client、microservice- zipkin-client-backend 三個程式實作了使用http方式進行通信,資料持久化到記憶體中的服務呼叫鏈路追蹤實作。
在這裡我們做兩點改動,首先是資料從保存在記憶體中改為持久化到資料庫,其次是將http通訊改為mq非同步方式通訊。

我們還是使用之前上一節的三個程式做修改,方便大家看到對比不同點。這裡每個項目名都加了一個stream,用來表示差異。

2、microservice-zipkin-stream-server

要將http方式改為透過MQ通信,我們要將依賴的原來依賴的io.zipkin.java:zipkin-server換成spring-cloud-sleuth-zipkin-stream和spring-cloud-starter-stream-rabbit
#同時要使用mysql持久化,我們需要加入mysql相關依賴。
全部maven依賴如下:

"
  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!--zipkin依赖-->
    <!--此依赖会自动引入spring-cloud-sleuth-stream并且引入zipkin的依赖包-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
    <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-autoconfigure-ui</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!--保存到数据库需要如下依赖-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
 
"
登入後複製

新增以上maven依賴後,我們將啟動類別ZipkinServer中@EnableZipkinServer註解替換成@EnableZipkinStreamServer,
如下:

package com.yangyang.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamServer;

/**
 * Created by chenshunyang on 2017/5/24.
 */
@EnableZipkinStreamServer// //使用Stream方式启动ZipkinServer
@SpringBootApplication
public class ZipkinStreamServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZipkinStreamServerApplication.class,args);
    }
}
登入後複製

點擊@ EnableZipkinStreamServer註解的原始碼我們可以看到它也引入了@EnableZipkinServer註解,同時也建立了一個rabbit-mq的訊息佇列監聽器。
spring-cloud-sleuth+zipkin追蹤服務實作(二)

以方便接收從訊息客戶端收集發送過來的mq訊息。

由於使用了訊息中間件rabbit mq以及mysql,所以我們還需要在設定檔application.properties加入相關的設定:

 server.port=11020
spring.application.name=microservice-zipkin-stream-server
#zipkin数据保存到数据库中需要进行如下配置
#表示当前程序不使用sleuth
spring.sleuth.enabled=false
#表示zipkin数据存储方式是mysql
zipkin.storage.type=mysql
#数据库脚本创建地址,当有多个是可使用[x]表示集合第几个元素
spring.datasource.schema[0]=classpath:/zipkin.sql
#spring boot数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/zipkin?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.initialize=true
spring.datasource.continue-on-error=true


#rabbitmq配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
登入後複製

其中zipkin.sql直接到官網去拷貝,也可以從本demo中拷貝
為了避免http通訊的干擾,我們將原來的監聽埠有11008改為11020,啟動程序,未報錯且能夠看到rabbit連線日誌,說明程式啟動成功。

3.microservice-zipkin-stream-client、microservice-zipkin-client-stream-backend

與上一節中的設定一樣,客戶端的設定也非常簡單,maven依賴只需要將原來的spring-cloud-starter-zipkin替換為如下兩個依賴即可

     <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
登入後複製

此外,在設定檔中也加上連接MQ的設定

server:
  port: 11021

spring:
  application:
    name: microservice-zipkin-stream-client

 #rabbitmq配置
  rabbitmq:
    host: 127.0.0.1
    port : 5672
    username: guest
    password: guest
登入後複製

當然為了以示區別,端口也做了相應的調整

4.測試

按照上一節的方式訪問:http://localhost:11021/call/1,我們可以上一節,說明rabbit-mq方式通訊的sleuth功能已經生效了。

我們多次造訪consumer的位址可以看到日誌中,請求的耗時時間不會再次出現突然耗時特長的情況。
為了體驗MQ通訊帶給我們的資料不遺失的特點,我們將資料庫中的資料清空,然後刷新zipkin server的介面,可以看到不再有資料

然後我們將zipkin -server程式想關閉,然後再多次訪問consumer的地址,之後,我們重啟zipkin server程序,啟動成功後訪問UI界面
很快看到Span Name選項有數據可以選擇了,同時數據庫中的記錄條數也不再是之前的0條了

如此說明我們的zipkin重啟後,從MQ中成功獲取出了在關閉這段時間裡provider和consumer產生的信息數據。這樣我們使用spring-cloud-sleuth-stream+zipkin方式的rest服務呼叫追蹤功能就OK了。


以上是spring-cloud-sleuth+zipkin追蹤服務實作(二)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!