最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot2.0 ZipKin示例代碼

 更新時(shí)間:2018年11月10日 15:53:05   作者:攻城遭雷劈  
這篇文章主要介紹了SpringBoot2.0 ZipKin示例代碼,詳細(xì)的介紹了什么是ZipKin以及SpringBoot2.0 ZipKin示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Zipkin是一種分布式跟蹤系統(tǒng)。它有助于收集解決微服務(wù)架構(gòu)中延遲問(wèn)題所需的時(shí)序數(shù)據(jù)。它管理這些數(shù)據(jù)的收集和查找。Zipkin的設(shè)計(jì)基于 Google Dapper論文。

應(yīng)用程序用于向Zipkin報(bào)告時(shí)間數(shù)據(jù)。Zipkin用戶界面還提供了一個(gè)依賴關(guān)系圖,顯示每個(gè)應(yīng)用程序有多少跟蹤請(qǐng)求。如果您正在解決延遲問(wèn)題或錯(cuò)誤問(wèn)題,則可以根據(jù)應(yīng)用程序,跟蹤長(zhǎng)度,注釋或時(shí)間戳過(guò)濾或排序所有跟蹤。選擇跟蹤后,您可以看到每個(gè)跨度所需的總跟蹤時(shí)間百分比,從而可以識(shí)別問(wèn)題應(yīng)用程序。

這是翻譯過(guò)來(lái)的原意,自己在這里想如果有個(gè)調(diào)用鏈,我們自己該怎么實(shí)現(xiàn)。要去質(zhì)疑任何代碼。

官方流程圖:最關(guān)鍵的是Transport這個(gè)地方,通過(guò)幾種方式傳輸給Conllector。如何在這里支持多種協(xié)議,有興趣的可以進(jìn)去看看源碼。


開(kāi)始示例,在這里通過(guò)一個(gè)項(xiàng)目調(diào)用不同的方法來(lái)進(jìn)行測(cè)試。

先下載Zipkin的web UI,通過(guò)java -jar zipkin.jar執(zhí)行


項(xiàng)目結(jié)構(gòu):


pom.xml

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <optional>true</optional>
</dependency>
<!-- zipkin-->
<dependency>
  <groupId>io.zipkin.brave</groupId>
  <artifactId>brave-core</artifactId>
  <version>3.10.0</version>
</dependency>
<dependency>
  <groupId>io.zipkin.brave</groupId>
  <artifactId>brave-spancollector-http</artifactId>
  <version>3.10.0</version>
</dependency>
<dependency>
  <groupId>io.zipkin.brave</groupId>
  <artifactId>brave-web-servlet-filter</artifactId>
  <version>3.10.0</version>
</dependency>
<dependency>
  <groupId>io.zipkin.brave</groupId>
  <artifactId>brave-okhttp</artifactId>
  <version>3.10.0</version>
</dependency>
<!-- zipkin-->

application.properties

server.port=9000

##########請(qǐng)求的項(xiàng)目名##########
server.servlet.context-path=/zipkinTest


##########zipKin################
zipkin.serviceName=zipkin-test
zipkin.url=http://localhost:9411
zipkin.connectTimeout=6000
zipkin.readTimeout=6000
zipkin.flushInterval=1
zipkin.compressionEnabled=true
  • server.port 訪問(wèn)端口號(hào)
  • server.servlet.context-path 訪問(wèn)項(xiàng)目名
  • zipkin.serviceName 服務(wù)名
  • zipkin.url  Zipkin的web ui訪問(wèn)地址
  • zipkin.connectTimeout 連接時(shí)間
  • zipkin.readTimeout 讀數(shù)據(jù)時(shí)間
  • zipkin.flushInterval 采集率
  • zipkin.compressionEnabled 是否壓縮

ZipkinProperties.java

package com.cms.zipkin;

import com.github.kristofa.brave.Brave;
import com.github.kristofa.brave.EmptySpanCollectorMetricsHandler;
import com.github.kristofa.brave.Sampler;
import com.github.kristofa.brave.SpanCollector;
import com.github.kristofa.brave.http.DefaultSpanNameProvider;
import static com.github.kristofa.brave.Brave.Builder;
import static com.github.kristofa.brave.http.HttpSpanCollector.Config;
import static com.github.kristofa.brave.http.HttpSpanCollector.create;
import com.github.kristofa.brave.okhttp.BraveOkHttpRequestResponseInterceptor;
import com.github.kristofa.brave.servlet.BraveServletFilter;
import lombok.Data;
import okhttp3.OkHttpClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @program: zjsz-user
 * @description: Zipkin配置
 * @author: Mr.Yang
 * @create: 2018-07-03 21:58
 **/
@Data
@Configuration
@ConfigurationProperties(prefix = ZipkinProperties.ZIPKIN_PREFIX)
public class ZipkinProperties {

  public static final String ZIPKIN_PREFIX = "zipkin";

  /**
   * 服務(wù)名稱
   */
  private String serviceName;

  /**
   * zipkin地址
   */
  private String url;

  /**
   * 連接時(shí)間
   */
  private int connectTimeout;

  /**
   * 讀取時(shí)間
   */
  private int readTimeout;

  /**
   * 每間隔多少秒執(zhí)行一次Span信息上傳
   */
  private int flushInterval;

  /**
   * 是否啟動(dòng)壓縮
   */
  private boolean compressionEnabled;

  /**
   * @Description: span(一次請(qǐng)求信息或者一次鏈路調(diào)用)信息收集器
   * @Param:
   * @return: SpanCollector 控制器
   * @Author: Mr.Yang
   * @Date: 2018/7/3 0002
   */
  @Bean
  public SpanCollector spanCollector() {
    Config config = Config.builder()
        // 默認(rèn)false,span在transport之前是否會(huì)被gzipped
        .compressionEnabled(compressionEnabled)
        .connectTimeout(connectTimeout)
        .flushInterval(flushInterval)
        .readTimeout(readTimeout)
        .build();
    return create(url, config, new EmptySpanCollectorMetricsHandler());
  }

  /**
   * @Description: 作為各調(diào)用鏈路,只需要負(fù)責(zé)將指定格式的數(shù)據(jù)發(fā)送給zipkin
   * @Param:
   * @return:
   * @Author: Mr.Yang
   * @Date: 2018/7/3 0002
   */
  @Bean
  public Brave brave(SpanCollector spanCollector) {
    //調(diào)用服務(wù)的名稱
    Builder builder = new Builder(serviceName);
    builder.spanCollector(spanCollector);
    //采集率
    builder.traceSampler(Sampler.ALWAYS_SAMPLE);
    return builder.build();
  }


  /**
   * @Description: 設(shè)置server的(服務(wù)端收到請(qǐng)求和服務(wù)端完成處理,并將結(jié)果發(fā)送給客戶端)過(guò)濾器
   * @Param:
   * @return: 過(guò)濾器
   * @Author: Mr.Yang
   * @Date: 2018/7/3 0002
   */
  @Bean
  public BraveServletFilter braveServletFilter(Brave brave) {
    BraveServletFilter filter = new BraveServletFilter(brave.serverRequestInterceptor(),
        brave.serverResponseInterceptor(), new DefaultSpanNameProvider());
    return filter;
  }

  /**
   * @Description: 設(shè)置client的(發(fā)起請(qǐng)求和獲取到服務(wù)端返回信息)攔截器
   * @Param:
   * @return: OkHttpClient 返回請(qǐng)求實(shí)例
   * @Author: Mr.Yang
   * @Date: 2018/7/3 0002
   */
  @Bean
  public OkHttpClient okHttpClient(Brave brave) {
    OkHttpClient httpClient = new OkHttpClient.Builder()
        .addInterceptor(new BraveOkHttpRequestResponseInterceptor(
            brave.clientRequestInterceptor(),
            brave.clientResponseInterceptor(),
            new DefaultSpanNameProvider())).build();
    return httpClient;
  }
}

ZipkinBraveController1 

package com.cms.contorller;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @program: zjsz-user
 * @description: 服務(wù)一
 * @author: Mr.Yang
 * @create: 2018-07-03 21:58
 **/
@RestController
@RequestMapping("server1")
public class ZipkinBraveController1 {


  @Autowired
  private OkHttpClient client;

  /**
  * @Description: 第一步調(diào)用
  * @Param:
  * @return: 字符串
  * @Author: Mr.Yang
  * @Date: 2018/7/3
  */
  @RequestMapping("/zipkin")
  public String service1() throws Exception {
    Thread.sleep(100);
    Request request = new Request.Builder().url("http://localhost:9000/zipkinTest/server2/zipkin").build();
    Response response = client.newCall(request).execute();
    return response.body().string();
  }

}

ZipkinBraveController2

package com.cms.contorller;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @program: zjsz-user
 * @description: 服務(wù)二
 * @author: Mr.Yang
 * @create: 2018-07-03 21:58
 **/
@RestController
@RequestMapping("server2")
public class ZipkinBraveController2 {

  @Autowired
  private OkHttpClient client;

  /**
   * @Description: 第二步調(diào)用
   * @Param:
   * @return: 字符串
   * @Author: Mr.Yang
   * @Date: 2018/7/3
   */
  @RequestMapping("/zipkin")
  public String service1() throws Exception {
    Thread.sleep(100);
    Request request = new Request.Builder().url("http://localhost:9000/zipkinTest/server3/zipkin").build();
    Response response = client.newCall(request).execute();
    return response.body().string();
  }

}

ZipkinBraveController3

package com.cms.contorller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


/**
 * @program: zjsz-user
 * @description: 服務(wù)三
 * @author: Mr.Yang
 * @create: 2018-07-03 21:58
 **/
@RestController
@RequestMapping("server3")
public class ZipkinBraveController3 {

  /**
   * @Description: 第三步調(diào)用
   * @Param:
   * @return: 字符串
   * @Author: Mr.Yang
   * @Date: 2018/7/3
   */
  @RequestMapping("/zipkin")
  public String service1() throws Exception {
    Thread.sleep(200);

    return "你好,歡迎進(jìn)入Zipkin的世界";
  }

}

項(xiàng)目啟動(dòng)后,訪問(wèn)http://localhost:9000/zipkinTest/server1/zipkin 就可以看到

你好,歡迎進(jìn)入Zipkin的世界

我們通過(guò)http://localhost:9411/zipkin 查看zipkin的web UI


查看每條調(diào)用鏈的詳情


后面還會(huì)講關(guān)于zipkin將數(shù)據(jù)整合到Mysql、Elasticsearch中去。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決java頁(yè)面URL地址傳輸參數(shù)亂碼的方法

    解決java頁(yè)面URL地址傳輸參數(shù)亂碼的方法

    這篇文章主要介紹了解決java頁(yè)面URL地址傳輸參數(shù)亂碼的方法,URL地址參數(shù)亂碼問(wèn)題,算是老話重談了吧!需要的朋友可以參考下
    2015-09-09
  • springboot整合rabbitmq的示例代碼

    springboot整合rabbitmq的示例代碼

    本篇文章主要介紹了springboot整合rabbitmq的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Java面試題沖刺第二十五天--并發(fā)編程2

    Java面試題沖刺第二十五天--并發(fā)編程2

    這篇文章主要為大家分享了最有價(jià)值的三道關(guān)于并發(fā)編程的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • java繼承學(xué)習(xí)之super的用法解析

    java繼承學(xué)習(xí)之super的用法解析

    本文介紹java繼承super的用法,Java繼承是會(huì)用已存在的類的定義作為基礎(chǔ)建立新類的技術(shù)新類的定義可以增加新的數(shù)據(jù)或者新的功能,也可以使用父類的功能,但不能選擇性的繼承父類 這種繼承使得復(fù)用以前的代碼非常容易,能夠大大的縮短開(kāi)發(fā)的周期,需要的朋友可以參考下
    2022-02-02
  • SpringBoot整合JDBC、Druid數(shù)據(jù)源的示例代碼

    SpringBoot整合JDBC、Druid數(shù)據(jù)源的示例代碼

    這篇文章主要介紹了SpringBoot整合JDBC、Druid數(shù)據(jù)源,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 利用 filter 機(jī)制給靜態(tài)資源 url 加上時(shí)間戳,來(lái)防止js和css文件的緩存問(wèn)題

    利用 filter 機(jī)制給靜態(tài)資源 url 加上時(shí)間戳,來(lái)防止js和css文件的緩存問(wèn)題

    這篇文章主要介紹了利用 filter 機(jī)制給靜態(tài)資源 url 加上時(shí)間戳,來(lái)防止js和css文件的緩存問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • 使用logback屏蔽一些包的日志

    使用logback屏蔽一些包的日志

    這篇文章主要介紹了使用logback屏蔽一些包的日志,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • java中的常用集合類整理

    java中的常用集合類整理

    本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于java中List集合及其實(shí)現(xiàn)類的方法介紹(附代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。下面我們就來(lái)學(xué)習(xí)一下吧,希望能給你帶來(lái)幫助
    2021-06-06
  • 使用IntelliJ IDEA 2017.2.5 x64中的Spring Initializr插件快速創(chuàng)建Spring Boot/Cloud工程(圖解)

    使用IntelliJ IDEA 2017.2.5 x64中的Spring Initializr插件快速創(chuàng)建Spring

    這篇文章主要介紹了使用IntelliJ IDEA 2017.2.5 x64中的Spring Initializr插件快速創(chuàng)建Spring Boot/Cloud工程(圖解),需要的朋友可以參考下
    2018-01-01
  • springboot中Controller中postman遇到的傳參問(wèn)題及解決

    springboot中Controller中postman遇到的傳參問(wèn)題及解決

    這篇文章主要介紹了springboot中Controller中postman遇到的傳參問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評(píng)論

莱州市| 伊宁市| 静乐县| 福泉市| 安岳县| 固原市| 光泽县| 略阳县| 健康| 潢川县| 凯里市| 平远县| 松原市| 镇坪县| 册亨县| 专栏| 潜山县| 宿迁市| 开江县| 彩票| 宽甸| 廊坊市| 阳原县| 天祝| 肇庆市| 咸宁市| 贺州市| 湛江市| 潢川县| 简阳市| 潞城市| 泗水县| 墨脱县| 财经| 河西区| 宁远县| 山东省| 宁明县| 雷山县| 萨迦县| 邵阳市|