SpringCloud实战(七)-服务链路追踪(Spring Cloud Sleuth)

本文是SpringCloud实战(七)-服务链路追踪(Spring Cloud Sleuth),若要关注前文,请点击传送门:

SpringCloud实战(六)-高可用的分布式配置中心(Spring Cloud Config)

前文我们介绍了分布式配置中心。本文主要讲述服务追踪组件zipkin,Spring Cloud Sleuth集成了zipkin组件。

一、Sleuth简介

Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可。

二、服务追踪分析

微服务架构上通过业务来划分服务的,通过REST调用,对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。

Paste_Image.png

随着服务的越来越多,对调用链的分析会越来越复杂。它们之间的调用关系也许如下:

Paste_Image.png

三、构建server-zipkin

在spring Cloud为F版本的时候,已经不需要自己构建Zipkin Server了,只需要下载jar即可,下载地址:

https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/

也可以在这里下载:

链接: https://pan.baidu.com/s/1k9YnUCpZzGfAeU2IlMuKxA 密码: jkpg

下载完成jar 包之后,需要运行jar,如下:

    java -jar zipkin-server-2.10.1-exec.jar

访问浏览器localhost:9411

四、改造service-hi工程

本文基于前文的service-hi工程进行改造,将它改造为zipkin工程。

4.1 maven依赖

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

4.2 配置文件(application.yml)

server:
  port: 8762

spring:
  application:
    name: service-hi
  zipkin:
    base-url: http://localhost:9411/
  sleuth:
    sampler:
      probability: 1

eureka:
  client:
    serviceUrl:
      defaultZone: http://eureka-serve-01:8759/eureka/

feign:
  hystrix:
    enabled: true

在其配置文件application.yml通过 spring.zipkin.base-url 指定zipkin server的地址,这样我们通过引入spring-cloud-starter-zipkin依赖和设置spring.zipkin.base-url就完成了zipkin的集成。

4.3 启动类(EurekaClientApplication)

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
@EnableHystrixDashboard
@EnableCircuitBreaker
public class EurekaClientApplication {

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

    @Bean
    public ServletRegistrationBean getServlet(){
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }
}

4.4 Controller层

@RestController
public class HelloController {

    @Resource
    LucyServiceHi lucyServiceHi;

    @RequestMapping(value = "/hiLucy")
    public String hiLucy(@RequestParam String name){
        String str = lucyServiceHi.sayHiFromClientOne(name);
        return str;
    }
}

4.5 Service层

@FeignClient(value = "service-lucy",fallback = SchedualServiceHiHystric.class)
public interface LucyServiceHi {

    @RequestMapping(value = "/hi",method = RequestMethod.GET)
    String sayHiFromClientOne(@RequestParam(value = "name") String name);
}
@Component
public class SchedualServiceHiHystric implements LucyServiceHi {

    @Override
    public String sayHiFromClientOne(String name) {
        return "sorry " + name;
    }
}

五、创建service-lucy工程

创建过程同service-hi,引入相同的依赖,配置下spring.zipkin.base-url。

对外暴露接口:

@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaLucyApplication {

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

    @Value("${server.port}")
    String port;

    @RequestMapping("/hi")
    public String home(@RequestParam(value = "name", defaultValue = "zzx") String name) {
        return "hi " + name + " ,i am from port:" + port;
    }
}

六、演示追踪

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

 访问 http://localhost:8762/hiLucy?name=zzx,浏览器出现

    hi zzx ,i am from port:8767

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

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

 服务链路追踪(Spring Cloud Sleuth)搭建完成。

发布了352 篇原创文章 · 获赞 390 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/qq_19734597/article/details/90045605