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

淺談Spring-cloud 之 sleuth 服務鏈路跟蹤

 更新時間:2018年01月04日 10:41:49   作者:方志朋  
本篇文章主要介紹了淺談Spring-cloud 之 sleuth 服務鏈路跟蹤,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

一、簡介

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.

—— 摘自官網

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

二、服務追蹤分析

微服務架構上通過業(yè)務來劃分服務的,通過REST調用,對外暴露的一個接口,可能需要很多個服務協(xié)同才能完成這個接口功能,如果鏈路上任何一個服務出現問題或者網絡超時,都會形成導致接口調用失敗。隨著業(yè)務的不斷擴張,服務之間互相調用會越來越復雜。

Paste_Image.png

隨著服務的越來越多,對調用鏈的分析會越來越復雜。它們之間的調用關系也許如下:

Paste_Image.png

三、術語

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

span在不斷的啟動和停止,同時記錄了時間信息,當你創(chuàng)建了一個span,你必須在未來的某個時刻停止它。

Trace:一系列spans組成的一個樹狀結構,例如,如果你正在跑一個分布式大數據工程,你可能需要創(chuàng)建一個trace。

Annotation:用來及時記錄一個事件的存在,一些核心annotations用來定義一個請求的開始和結束

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

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

Paste_Image.png

四、構建工程

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

4.1 構建server-zipkin

建一個spring-boot工程取名為server-zipkin,在其pom引入依賴:

<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>

在其程序入口類, 加上注解@EnableZipkinServer,開啟ZipkinServer的功能:

@SpringBootApplication
@EnableZipkinServer
public class ServerZipkinApplication {

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

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

server.port=9411

4.2 創(chuàng)建service-hi

在其pom引入起步依賴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的地址,頭通過配置“spring.zipkin.base-url”指定:

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

通過引入spring-cloud-starter-zipkin依賴和設置spring.zipkin.base-url就可以了。

對外暴露接口:

@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)建過程痛service-hi,引入相同的依賴,配置下spring.zipkin.base-url。

對外暴露接口:

@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 啟動工程,演示追蹤

依次啟動上面的三個工程,打開瀏覽器訪問:http://localhost:9411/,會出現以下界面:

Paste_Image.png

訪問:http://localhost:8989/miya,瀏覽器出現:i'm service-hi

再打開http://localhost:9411/的界面,點擊Dependencies,可以發(fā)現服務的依賴關系:

Paste_Image.png

點擊find traces,可以看到具體服務相互調用的數據:

Paste_Image.png

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 詳解Mybatis分頁插件 - 示例代碼

    詳解Mybatis分頁插件 - 示例代碼

    這篇文章主要介紹了詳解Mybatis分頁插件 - 示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧。
    2016-12-12
  • Java利用DFA算法實現敏感詞管理

    Java利用DFA算法實現敏感詞管理

    我們在完成一些文章發(fā)布的功能是,可以使用第三方工具如阿里云的內容安全來進行文章的審核,但是這個第三方接口并不能過濾一些敏感詞,所以本文就來講講如何通過DFA算法就行敏感詞管理吧
    2024-11-11
  • Windows下如何安裝配置Redis環(huán)境

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

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

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

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

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

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

    一文詳解Java閉鎖和柵欄的實現

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

    JavaFX Application應用實例

    下面小編就為大家?guī)硪黄狫avaFX Application應用實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • Java將本地項目部署到Linux服務器的實踐

    Java將本地項目部署到Linux服務器的實踐

    本文主要介紹了Java將本地項目部署到Linux服務器的實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2022-06-06
  • 詳解Jmeter中的BeanShell腳本

    詳解Jmeter中的BeanShell腳本

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

    詳解mybatis 批量更新數據兩種方法效率對比

    這篇文章主要介紹了詳解mybatis 批量更新數據兩種方法效率對比,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-02-02

最新評論

唐河县| 石河子市| 大理市| 资中县| 赤城县| 合作市| 繁昌县| 瑞金市| 商南县| 永修县| 汶上县| 镇沅| 怀仁县| 宁国市| 宁晋县| 神农架林区| 沙田区| 鹤壁市| 阜平县| 湖北省| 伊金霍洛旗| 西华县| 金阳县| 桃源县| 全南县| 景谷| 云林县| 鹿邑县| 武城县| 鹿邑县| 东台市| 无极县| 垣曲县| 肇东市| 响水县| 旌德县| 内乡县| 鄂尔多斯市| 邳州市| 桐柏县| 类乌齐县|