Spring Cloud构建微服务架构:分布式服务跟踪(入门)

作者:媒体转发 时间:2018-03-06 01:56

字号

通过之前的N篇博文介绍,实际上我们已经能够通过使用它们搭建起一个基础的微服务架构系统来实现我们的业务需求了。但是,随着业务的发展,我们的系统规模也会变得越来越大,各微服务间的调用关系也变得越来越错综复杂。

通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,在复杂的微服务架构系统中,几乎每一个前端请求都会形成一条复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟过高或错误的时候都有可能引起请求最后的失败。这时候对于每个请求全链路调用的跟踪就变得越来越重要,通过实现对请求调用的跟踪可以帮助我们快速的发现错误根源以及监控分析每条请求链路上的性能瓶颈等好处。

Spring Cloud构建微服务架构:分布式服务跟踪(入门)

针对上面所述的分布式服务跟踪问题,Spring Cloud Sleuth提供了一套完整的解决方案。在本章中,我们将详细介绍如何使用Spring Cloud Sleuth来为我们的微服务架构增加分布式服务跟踪的能力。

快速入门

在介绍各种概念与原理之前,我们先通过实现一个简单的示例,对存在服务调用的应用增加一些sleuth的配置实现基本的服务跟踪功能,以此来对Spring Cloud Sleuth有一个初步的了解,随后再逐步展开介绍实现过程中的各个细节部分。

准备工作

在引入Sleuth之前,我们先按照之前章节学习的内容来做一些准备工作,构建一些基础的设施和应用:

服务注册中心:eureka-server,这里不做赘述,直接使用之前构建的工程。或者直接使用我的公益eureka注册中心,下面的例子使用该注册中心。

微服务应用:trace-1,实现一个REST接口/trace-1,调用该接口后将触发对trace-2应用的调用。具体实现如下:

创建一个基础的Spring Boot应用,在pom.xml中增加下面依赖:

<parent> 

    <groupId>org.springframework.boot</groupId> 

    <artifactId>spring-boot-starter-parent</artifactId> 

    <version>1.5.10.RELEASE</version> 

    <relativePath/>  

</parent> 

<dependency> 

    <groupId>org.springframework.boot</groupId> 

    <artifactId>spring-boot-starter-web</artifactId> 

</dependency> 

<dependency> 

    <groupId>org.springframework.cloud</groupId> 

    <artifactId>spring-cloud-starter-eureka</artifactId> 

</dependency> 

<dependency> 

    <groupId>org.springframework.cloud</groupId> 

    <artifactId>spring-cloud-starter-ribbon</artifactId> 

</dependency> 

<dependencyManagement> 

    <dependencies> 

        <dependency> 

            <groupId>org.springframework.cloud</groupId> 

            <artifactId>spring-cloud-dependencies</artifactId> 

            <version>Dalston.SR5</version> 

            <type>pom</type> 

            <scope>import</scope> 

        </dependency> 

    </dependencies> 

</dependencyManagement> 

创建应用主类,并实现/trace-1接口,并使用RestTemplate调用trace-2应用的接口。具体如下:

@RestController 

@EnableDiscoveryClient 

@SpringBootApplication 

public class TraceApplication { 

 

    private final Logger logger = Logger.getLogger(getClass()); 

 

    @Bean 

    @LoadBalanced 

    RestTemplate restTemplate() { 

        return new RestTemplate(); 

    } 

 

    @RequestMapping(value = "/trace-1", method = RequestMethod.GET) 

    public String trace() { 

        logger.info("===call trace-1==="); 

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接