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

淺談Spring-cloud 之 sleuth 服務(wù)鏈路跟蹤

 更新時(shí)間:2018年01月04日 10:41:49   作者:方志朋  
本篇文章主要介紹了淺談Spring-cloud 之 sleuth 服務(wù)鏈路跟蹤,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

這篇文章主要講述服務(wù)追蹤組件zipkin,Spring Cloud Sleuth集成了zipkin組件。

一、簡(jiǎn)介

Add sleuth to the classpath of a Spring Boot application (see below for Maven and Gradle examples), and you will see the correlation data being collected in logs, as long as you are logging requests.

—— 摘自官網(wǎng)

Spring Cloud Sleuth 主要功能就是在分布式系統(tǒng)中提供追蹤解決方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相應(yīng)的依賴(lài)即可。

二、服務(wù)追蹤分析

微服務(wù)架構(gòu)上通過(guò)業(yè)務(wù)來(lái)劃分服務(wù)的,通過(guò)REST調(diào)用,對(duì)外暴露的一個(gè)接口,可能需要很多個(gè)服務(wù)協(xié)同才能完成這個(gè)接口功能,如果鏈路上任何一個(gè)服務(wù)出現(xiàn)問(wèn)題或者網(wǎng)絡(luò)超時(shí),都會(huì)形成導(dǎo)致接口調(diào)用失敗。隨著業(yè)務(wù)的不斷擴(kuò)張,服務(wù)之間互相調(diào)用會(huì)越來(lái)越復(fù)雜。

Paste_Image.png

隨著服務(wù)的越來(lái)越多,對(duì)調(diào)用鏈的分析會(huì)越來(lái)越復(fù)雜。它們之間的調(diào)用關(guān)系也許如下:

Paste_Image.png

三、術(shù)語(yǔ)

Span:基本工作單元,例如,在一個(gè)新建的span中發(fā)送一個(gè)RPC等同于發(fā)送一個(gè)回應(yīng)請(qǐng)求給RPC,span通過(guò)一個(gè)64位ID唯一標(biāo)識(shí),trace以另一個(gè)64位ID表示,span還有其他數(shù)據(jù)信息,比如摘要、時(shí)間戳事件、關(guān)鍵值注釋(tags)、span的ID、以及進(jìn)度ID(通常是IP地址)

span在不斷的啟動(dòng)和停止,同時(shí)記錄了時(shí)間信息,當(dāng)你創(chuàng)建了一個(gè)span,你必須在未來(lái)的某個(gè)時(shí)刻停止它。

Trace:一系列spans組成的一個(gè)樹(shù)狀結(jié)構(gòu),例如,如果你正在跑一個(gè)分布式大數(shù)據(jù)工程,你可能需要?jiǎng)?chuàng)建一個(gè)trace。

Annotation:用來(lái)及時(shí)記錄一個(gè)事件的存在,一些核心annotations用來(lái)定義一個(gè)請(qǐng)求的開(kāi)始和結(jié)束

  1. cs - Client Sent -客戶端發(fā)起一個(gè)請(qǐng)求,這個(gè)annotion描述了這個(gè)span的開(kāi)始
  2. sr - Server Received -服務(wù)端獲得請(qǐng)求并準(zhǔn)備開(kāi)始處理它,如果將其sr減去cs時(shí)間戳便可得到網(wǎng)絡(luò)延遲
  3. ss - Server Sent -注解表明請(qǐng)求處理的完成(當(dāng)請(qǐng)求返回客戶端),如果ss減去sr時(shí)間戳便可得到服務(wù)端需要的處理請(qǐng)求時(shí)間
  4. cr - Client Received -表明span的結(jié)束,客戶端成功接收到服務(wù)端的回復(fù),如果cr減去cs時(shí)間戳便可得到客戶端從服務(wù)端獲取回復(fù)的所有所需時(shí)間

將Span和Trace在一個(gè)系統(tǒng)中使用Zipkin注解的過(guò)程圖形化:

Paste_Image.png

四、構(gòu)建工程

基本知識(shí)講解完畢,下面我們來(lái)實(shí)戰(zhàn),本文的案例主要有三個(gè)工程組成:一個(gè)server-zipkin,它的主要作用使用ZipkinServer 的功能,收集調(diào)用數(shù)據(jù),并展示;一個(gè)service-hi,對(duì)外暴露hi接口;一個(gè)service-miya,對(duì)外暴露miya接口;這兩個(gè)service可以相互調(diào)用;并且只有調(diào)用了,server-zipkin才會(huì)收集數(shù)據(jù)的,這就是為什么叫服務(wù)追蹤了。

4.1 構(gòu)建server-zipkin

建一個(gè)spring-boot工程取名為server-zipkin,在其pom引入依賴(lài):

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

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

 <dependency>
  <groupId>io.zipkin.java</groupId>
  <artifactId>zipkin-server</artifactId>
 </dependency>

 <dependency>
  <groupId>io.zipkin.java</groupId>
  <artifactId>zipkin-autoconfigure-ui</artifactId>
 </dependency>

 </dependencies>

 <dependencyManagement>
 <dependencies>
  <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-dependencies</artifactId>
  <version>Camden.SR6</version>
  <type>pom</type>
  <scope>import</scope>
  </dependency>
 </dependencies>
 </dependencyManagement>

在其程序入口類(lèi), 加上注解@EnableZipkinServer,開(kāi)啟ZipkinServer的功能:

@SpringBootApplication
@EnableZipkinServer
public class ServerZipkinApplication {

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

在配置文件application.yml指定服務(wù)端口為:

server.port=9411

4.2 創(chuàng)建service-hi

在其pom引入起步依賴(lài)spring-cloud-starter-zipkin,代碼如下:

<dependencies>

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <!--compile('org.springframework.cloud:spring-cloud-starter-zipkin')-->

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

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
 </dependency>
 </dependencies>

 <dependencyManagement>
 <dependencies>
  <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-dependencies</artifactId>
  <version>Dalston.RC1</version>
  <type>pom</type>
  <scope>import</scope>
  </dependency>
 </dependencies>
 </dependencyManagement>

在其配置文件application.yml指定zipkin server的地址,頭通過(guò)配置“spring.zipkin.base-url”指定:

server.port=8988
spring.zipkin.base-url=http://localhost:9411
spring.application.name=service-hi

通過(guò)引入spring-cloud-starter-zipkin依賴(lài)和設(shè)置spring.zipkin.base-url就可以了。

對(duì)外暴露接口:

@SpringBootApplication
@RestController
public class ServiceHiApplication {

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

 private static final Logger LOG = Logger.getLogger(ServiceHiApplication.class.getName());


 @Autowired
 private RestTemplate restTemplate;

 @Bean
 public RestTemplate getRestTemplate(){
 return new RestTemplate();
 }

 @RequestMapping("/hi")
 public String callHome(){
 LOG.log(Level.INFO, "calling trace service-hi ");
 return restTemplate.getForObject("http://localhost:8989/miya", String.class);
 }
 @RequestMapping("/info")
 public String info(){
 LOG.log(Level.INFO, "calling trace service-hi ");

 return "i'm service-hi";

 }

 @Bean
 public AlwaysSampler defaultSampler(){
 return new AlwaysSampler();
 }
}

4.3 創(chuàng)建service-miya

創(chuàng)建過(guò)程痛service-hi,引入相同的依賴(lài),配置下spring.zipkin.base-url。

對(duì)外暴露接口:

@SpringBootApplication
@RestController
public class ServiceMiyaApplication {

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

 private static final Logger LOG = Logger.getLogger(ServiceMiyaApplication.class.getName());


 @RequestMapping("/hi")
 public String home(){
 LOG.log(Level.INFO, "hi is being called");
 return "hi i'm miya!";
 }

 @RequestMapping("/miya")
 public String info(){
 LOG.log(Level.INFO, "info is being called");
 return restTemplate.getForObject("http://localhost:8988/info",String.class);
 }

 @Autowired
 private RestTemplate restTemplate;

 @Bean
 public RestTemplate getRestTemplate(){
 return new RestTemplate();
 }
}

4.4 啟動(dòng)工程,演示追蹤

依次啟動(dòng)上面的三個(gè)工程,打開(kāi)瀏覽器訪問(wèn):http://localhost:9411/,會(huì)出現(xiàn)以下界面:

Paste_Image.png

訪問(wèn):http://localhost:8989/miya,瀏覽器出現(xiàn):i'm service-hi

再打開(kāi)http://localhost:9411/的界面,點(diǎn)擊Dependencies,可以發(fā)現(xiàn)服務(wù)的依賴(lài)關(guān)系:

Paste_Image.png

點(diǎn)擊find traces,可以看到具體服務(wù)相互調(diào)用的數(shù)據(jù):

Paste_Image.png

本文源碼下載: https://github.com/forezp/SpringCloudLearning/tree/master/chapter9

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

相關(guān)文章

  • 詳解Mybatis分頁(yè)插件 - 示例代碼

    詳解Mybatis分頁(yè)插件 - 示例代碼

    這篇文章主要介紹了詳解Mybatis分頁(yè)插件 - 示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。
    2016-12-12
  • Java利用DFA算法實(shí)現(xiàn)敏感詞管理

    Java利用DFA算法實(shí)現(xiàn)敏感詞管理

    我們?cè)谕瓿梢恍┪恼掳l(fā)布的功能是,可以使用第三方工具如阿里云的內(nèi)容安全來(lái)進(jìn)行文章的審核,但是這個(gè)第三方接口并不能過(guò)濾一些敏感詞,所以本文就來(lái)講講如何通過(guò)DFA算法就行敏感詞管理吧
    2024-11-11
  • Windows下如何安裝配置Redis環(huán)境

    Windows下如何安裝配置Redis環(huán)境

    這篇文章主要介紹了Windows下如何安裝配置Redis環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java8新特性Stream的完全使用指南

    Java8新特性Stream的完全使用指南

    這篇文章主要給大家介紹了關(guān)于Java8新特性Stream的完全使用指南,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java中List集合對(duì)象去重及按屬性去重的8種方法

    Java中List集合對(duì)象去重及按屬性去重的8種方法

    這篇文章主要介紹了Java中List集合對(duì)象去重及按屬性去重的8種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一地的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 一文詳解Java閉鎖和柵欄的實(shí)現(xiàn)

    一文詳解Java閉鎖和柵欄的實(shí)現(xiàn)

    閉鎖與柵欄是在多線程編程中的概念,因?yàn)樵诙嗑€程中,我們不能控制線程的執(zhí)行狀態(tài),所以給線程加鎖,讓其按照我們的想法有秩序的執(zhí)行。本文將詳解Java閉鎖和柵欄的實(shí)現(xiàn),需要的可以參考一下
    2022-06-06
  • JavaFX Application應(yīng)用實(shí)例

    JavaFX Application應(yīng)用實(shí)例

    下面小編就為大家?guī)?lái)一篇JavaFX Application應(yīng)用實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • Java將本地項(xiàng)目部署到Linux服務(wù)器的實(shí)踐

    Java將本地項(xiàng)目部署到Linux服務(wù)器的實(shí)踐

    本文主要介紹了Java將本地項(xiàng)目部署到Linux服務(wù)器的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-06-06
  • 詳解Jmeter中的BeanShell腳本

    詳解Jmeter中的BeanShell腳本

    BeanShell是一種完全符合Java語(yǔ)法規(guī)范的腳本語(yǔ)言,并且又擁有自己的一些語(yǔ)法和方法,所以它和java是可以無(wú)縫銜接的,學(xué)了Java的一些基本語(yǔ)法后,就可以來(lái)在Jmeter中寫(xiě)寫(xiě)B(tài)eanShell腳本了
    2021-12-12
  • 詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對(duì)比

    詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對(duì)比

    這篇文章主要介紹了詳解mybatis 批量更新數(shù)據(jù)兩種方法效率對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02

最新評(píng)論

武陟县| 桦甸市| 安国市| 聂拉木县| 普安县| 乌拉特中旗| 肥城市| 栖霞市| 桃园市| 蒙阴县| 道孚县| 景东| 弋阳县| 吉木乃县| 嘉善县| 普陀区| 会理县| 平武县| 巨鹿县| 土默特右旗| 丁青县| 聂荣县| 晴隆县| 仪陇县| 武鸣县| 汕尾市| 固始县| 双峰县| 绥棱县| 莒南县| 七台河市| 信丰县| 偏关县| 沈阳市| 南靖县| 巢湖市| 新闻| 措勤县| 白朗县| 闽侯县| 尼勒克县|