zoukankan      html  css  js  c++  java
  • spring-cloud-part 9 : spring cloud sleuth(服务链路追踪)

    摘自 http://blog.csdn.net/forezp/article/details/70162074

    一   简介 

     zipkin 是服务链路追踪组件,在springcloud中,spring cloud sleuth是集成了zipkin的;

    换言之,spring cloud sleuth就是在分布式系统中提供追踪解决方案的,而且其兼容支持了zipkin,所以在微服务架构中,一般使用spring cloud sleuth来追踪服务链的调用;

    二  服务追踪分析

      在微服务架构中是通过业务来划分服务的,通过REST来进行调用,对外暴露一个接口,通常需要很多个微服务协同作用来实现某个功能,如果其中某一个微服务调用失败或者网络超时,都会造成这个接口不可用。随着业务功能的越来越完善,服务之间的调用越来越复杂。所以随着服务的越来越多,它们的调用链也是越来越复杂。

    三  实例操作

      该实例分为三个服务,sleuth-server是zipkin的server服务,service-hi 服务调用 service-miya 服务,service-miya 也调用 service-hi服务;

    /**
    * 1.sleuth-server
    * 01 导包 io.zipkin.java zipkin-server + zipkin-autoconfigure-ui
    * 02 配置application.yml
    * server.port:9411
    * 03 程序主入口类上加上 @EnableZipkinServer
    * 2 service-hi
    * 01 导包 org.springframework.cloud spring-cloud-starter-zipkin
    * 02 配置application.yml配置文件
    *   server.port:8988
    *   spring.application.name:service-hi
    *   spring.zipkin.base-url:http://localhost:9411
    * 03 调用service-miya的服务 来使zipkin(sleuth)监控链路调用的组件监控中产生数据
         @SpringBootApplication
             @RestController
             public class ServiceHiApplication {
    
                 @Autowired
                 private RestTemplate restTemplate;
    
                 private  static final Logger LOG=Logger.getLogger(ServiceHiApplication.class.getName());
    
                 @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 callInfo(){
                 LOG.log(Level.INFO,"calling trace service-hi");
                 return "this is service-hi";
                 }
    
                 public static void main(String[] args) {
                 SpringApplication.run(ServiceHiApplication.class, args);
                 }
    
                 @Bean
                 public RestTemplate getRestTemplate(){
                 return new RestTemplate();
                 }
    
                 @Bean  //在访问localhost:9411  时能够监控到调用关系和调用数据
                 public AlwaysSampler getAlwaysSampler(){
                 return new AlwaysSampler();
                 }
             }      
       3  service-miya
    01 导包 spring-boot-starter-web spring-cloud-starter-zipkin
    02 配置application.yml 文件,端口 8989
    03 主类中调用service-hi服务
        @SpringBootApplication
           @RestController
           public class ServiceMiyaApplication {
                 @Autowired
                 private RestTemplate restTemplate;
                
                 private static final Logger LOG=Logger.getLogger(ServiceMiyaApplication.class.getName());
                
                 @RequestMapping("/hi")
                 public String callHome(){
                 LOG.log(Level.INFO,"this is miya 方法");
                 return "this is method miya";
                 }
                
                 @RequestMapping("/miya")
                 public String getInfo(){
                 LOG.log(Level.INFO,"hi is calling");
                 return restTemplate.getForObject("http://localhost:8988/info",String.class);
                 }
                
                 public static void main(String[] args) {
                 SpringApplication.run(ServiceMiyaApplication.class, args);
                 }
                
                 @Bean
                 public RestTemplate getRestTemplate(){
                 return new RestTemplate();
                 }
            }       
     */

    启动工程,演示追踪

    依次启动上面的三个工程,打开浏览器访问:http://localhost:9411/,会出现以下界面:

    Paste_Image.png

    访问:http://localhost:8989/miya,浏览器出现:

    i’m service-hi

    再打开http://localhost:9411/的界面,点击Dependencies,可以发现服务的依赖关系:

    Paste_Image.png

    点击find traces,可以看到具体服务相互调用的数据:

    Paste_Image.png

    *   问题: 1.导包不写版本号   就会显示unknown--同问题3的,<parent></parent>要导正确
    * 2.在zipkin界面 看不到服务追踪中的调用关系
    * 3. 在一个project下面新建多个modules时候,父pom中导入的包,在子pom中怎样可以不需要重复导包 --子module中的<parent></parent>要导入父pom的groupId等信息,父pom里自己的<parent>要改成spring-boot-starter-parent

    父pom中的<parent></parent>的写法

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.titter.springcloud</groupId>
        <artifactId>spring-cloud-eureka-s-0119</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.9.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>  //统一编码方式
            <java.version>1.8</java.version>                //jdk版本号
            <spring-cloud.version>Edgware.SR1</spring-cloud.version>   //spring cloud的版本号
        </properties>   
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>    //统一整个项目中的spring-cloud的版本号
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        
    </project>
    

      

    子module中的写法如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.titter.springcloud</groupId>
    	<artifactId>eureka-register-service-backup</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    
    	<name>eureka-register-service-backup</name>
    	<description>Demo project for Spring Boot</description>
    
    	<parent>
    		<groupId>com.titter.springcloud</groupId>
    		<artifactId>spring-cloud-eureka-s-0119</artifactId>
    		<version>1.0-SNAPSHOT</version>
    	</parent>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-eureka-server</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<finalName>eureka-register-service-backup</finalName>
    	</build>
    
    </project>
    
  • 相关阅读:
    一行CSS解决DateChooser 的折行问题
    不再为DataGrid生成的表格的单无格中的内容过长、自动折行、表格撑开等问题而烦恼一个很久以前的做品
    SQL Server中也用格式字符串定制日期转换为字符串
    Cache总义
    Cookie 支持二级域名和FormsAuthentication 加强版
    CommunityServer 2.0 RTM时间是:20060217 Scott Watermasysk今天中午
    不知谁给我留的言,要招DNN 程序员,会这个的朋友可以看看
    "#RRGGBB"与Color类型的转换 补充
    DateChooser源码DateTimeStringEditor.cs
    I had no sooner finished eating than went to toilet.
  • 原文地址:https://www.cnblogs.com/zdj-/p/8303428.html
Copyright © 2011-2022 走看看