1. Zipkin是啥

Zipkin是一个分布式追踪系统,可以有效的在微服务架构中发现延时问题,是基于Google Dapper论文设计的。其源码位于Github的OpenZipkin/Zipkin

2. Brave是啥

Brave充当了Zipkin 系统中的Collector,把服务中的一些数据封装成Span实时的发送到Zipkin中去。其名字由 荷兰语中的Dapper翻译而来。

3. Brave 能干啥

Brave 可以监听到你的服务中的http请求,并且把会给每个请求创建一个spanId和tracingId,并且把这两个Id存放到ThreadLocal中,在该请求处理结束之前,你的log里都可以获取到这两个Id,即使不使用外部带(out-of-band)的zipkin,也可以很方便的追踪本地请求处理链条。

4. 整合Spring-MVC

上实战。

4.1 pom文件中添加如下依赖

<!-- brave整合spring 提供了一系列Sender工厂类 --><dependency><groupId>io.zipkin.brave</groupId><artifactId>brave-spring-beans</artifactId></dependency>
<!-- brave核心包 --><dependency><groupId>io.zipkin.brave</groupId><artifactId>brave</artifactId></dependency>
<!-- brave整合slf4j 提供了%X{spanId}和%X{tacingId} 的log配置 --><dependency><groupId>io.zipkin.brave</groupId><artifactId>brave-context-slf4j</artifactId></dependency>
<!-- brave整合spring-mvc 提供了filter和interceptor --><dependency><groupId>io.zipkin.brave</groupId><artifactId>brave-instrumentation-spring-webmvc</artifactId></dependency>

4.2 项目中添加Tracing配置类

import brave.Tracing;
import brave.context.slf4j.MDCScopeDecorator;
import brave.http.HttpTracing;
import brave.propagation.B3Propagation;
import brave.propagation.ExtraFieldPropagation;
import brave.propagation.ThreadLocalCurrentTraceContext;
import brave.servlet.TracingFilter;
import brave.spring.webmvc.SpanCustomizingAsyncHandlerInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;import javax.servlet.Filter;/*** @Author: Yoruichi* @Date: 2018/11/14 6:27 PM*/
@Configuration
@Import(SpanCustomizingAsyncHandlerInterceptor.class)
public class TracingConfig {private static final Logger log = LoggerFactory.getLogger(TracingConfig.class);@Beanpublic Tracing tracing() {return Tracing.newBuilder()
//配置本地服务名称.localServiceName("API-Service")
//配置propagation工厂类.propagationFactory(ExtraFieldPropagation.newFactory(B3Propagation.FACTORY, "SIGNATURE"))
//配置slf4j的MDC                .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder().addScopeDecorator(MDCScopeDecorator.create()).build())
//配置span reporter 这里是打印span到log文件,默认是打印到console,如果要发送到zipkin服务需要在这里配置sender.spanReporter(span -> log.info("{}", span)).build();}/*** decides how to name and tag spans. By default they are named the same as the http method.*/@BeanHttpTracing httpTracing(Tracing tracing) {return HttpTracing.create(tracing);}/*** Creates server spans for http requests*/@BeanFilter tracingFilter(HttpTracing httpTracing) {return TracingFilter.create(httpTracing);}}

4.3 在web.xml中添加Filter配置

  <filter><filter-name>tracingFilter</filter-name><filter-class>brave.spring.webmvc.DelegatingTracingFilter</filter-class></filter><filter-mapping><filter-name>tracingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

4.4 在application-content.xml中添加interceptor配置

<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><bean class="brave.spring.webmvc.SpanCustomizingAsyncHandlerInterceptor"/></mvc:interceptor>
</mvc:interceptors>

interceptor也可以通过Java代码方式添加配置,具体方式此处略。

4.5 在logback中增加配置

<!-- 主要是%X{traceId}/%X{spanId}的配置 --><property name="LOG_PATTERN"value="%date{yyyy-MM-dd HH:mm:ss} - [%X{traceId}/%X{spanId}] - [%level] - [%F:%L] - [%t] - %M - %logger{36} - %message%n%xException"/>

做好上面这些配置工作之后启动你的服务,发送请求你可以在你的log文件中看到对应的信息了

2018-11-15 14:35:12 - [77849f28f2458165/77849f28f2458165] - [INFO] - [SignatureInterceptor.java:76] - [http-nio-7305-exec-1] - preHandle - c.s.e.a.i.SignatureInterceptor - requestURI=/api/v1/tracing
2018-11-15 14:35:12 - [77849f28f2458165/77849f28f2458165] - [INFO] - [SignatureInterceptor.java:77] - [http-nio-7305-exec-1] - preHandle - c.s.e.a.i.SignatureInterceptor - queryString=null
2018-11-15 14:35:12 - [77849f28f2458165/77849f28f2458165] - [INFO] - [SignatureInterceptor.java:78] - [http-nio-7305-exec-1] - preHandle - c.s.e.a.i.SignatureInterceptor - body=
2018-11-15 14:35:12 - [77849f28f2458165/77849f28f2458165] - [INFO] - [Logger.java:193] - [http-nio-7305-exec-1] - info - c.s.e.a.controller.BaseController - #tracing(): in 370.20ms

Zipkin/Brave 整合Spring-MVC 框架实战相关推荐

  1. 搭建基于spring MVC框架 + RESTful架构风格技术总结

    2019独角兽企业重金招聘Python工程师标准>>> 实战篇: 在SpringMVC框架中搭建RESTful架构风格来完成客户端与服务器端的低耦合度.可扩展性.高并发与大数据流量的 ...

  2. 【实战】Spring+Spring MVC+Mybatis实战项目之云笔记项目

    [实战]Spring+Spring MVC+Mybatis实战项目之云笔记项目 一.项目简介           1.项目概述 云笔记,是tmocc上的一个子项目,用于客户进行在线学习记录,分享,收藏 ...

  3. Spring MVC框架的高级配置

    前言: 本文将为您提供关于Spring MVC框架的配置技巧,以帮助管理基于Spring的web应用程序的多个实例.本配置管理主题常被学术界所忽略,但是,这对于现实的web开发尤为重要.本主题并不直接 ...

  4. Mybatis,Spring,MVC框架

    文章目录 @[toc] unit12-mybatis框架 MyBatis简介(了解) 什么是MyBatis 为什么要使用MyBatis MyBatis快速入门 准备数据,创建库和表 创建工程,导入所需 ...

  5. Spring mvc框架

    1.1.什么是Spring mvc         Spring mvc是Spring的一个模块,与Spring的继承无需中间层进行整合. 1.2.mvc在b/s系统下的应用 1.3.Spring m ...

  6. Spring MVC 框架搭建及详解

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...

  7. spring mvc框架设计与实现

    spring mvc框架通过DispatcherServlet来作请求分发,主要由HandlerMapping,HandlerAdapter,HandlerInterceptor三个抽象来完成.通过H ...

  8. springboot templates读取不到_整合spring mvc + mybatis,其实很简单,spring boot实践(5)

    01 spring boot读取配置信息 02 多环境配置 03 处理全局异常 04 spring boot admin 主要通过spring boot整合spring mvc 以及mybatis实现 ...

  9. 从 0 开始手写一个 Spring MVC 框架,向高手进阶

    转载自   从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...

最新文章

  1. 自动驾驶中的车道线跟踪技术
  2. AT5198 01 Matrix(构造)
  3. pymssql 安装后只有 .disk-info_变频空调安装注意事项
  4. IPsec NAT穿越
  5. 五分钟学会centos配置gitlab
  6. 以一致的体验交付和管理云原生多集群应用
  7. 志愿怎么填?洞察应届毕业生就业形式,把握未来求职方向 | 易观千帆行业案例
  8. ##MySql数据库表的操作与应用
  9. 计算机ip地址配置参数,指定电脑的IP地址和DNS等参数配置方法
  10. SQL Server中行列转换 Pivot UnPivot
  11. 2018-2019-2 网络对抗技术 20165332 Exp6 信息搜集与漏洞扫描
  12. 计算机视觉基础-图像处理(图像分割/二值化)cpp+python
  13. M study summarize
  14. arcgis图像和坐标系统一致但不重合_学习ArcGIS,这62个Arcmap常用操作技巧可能帮到您...
  15. 好淘客饿了么返利系统-外卖返利优惠券系统-支持美团、饿了么的外卖和商超/电影票 支持多级代理返利
  16. 机器人开发--NDC方案
  17. MATLAB自定义拟合函数
  18. bash shell脚本实例合集
  19. 【王道数据结构】思维导图--5.1树的基本概念(树与二叉树)(高清)
  20. 比较好的python培训班

热门文章

  1. excel表格xlsx解开加密在线,excel表格xlsx权限限制怎么解除?
  2. uCOS-II消息邮箱的相关操作函数
  3. IBM Thinkpad-要用就用最好的笔记本
  4. vncserver对linux系统图形化界面
  5. 服务器 希捷1t硬盘,希捷推出全球首款SAS接口1TB硬盘-通信/网络-与非网
  6. loopback修改密码功能(去掉邮箱验证了)
  7. 计算机图形学基础教程学习总结
  8. 计蒜客c语言 蒜头君招聘程序,计蒜客 数据结构 蒜头君筛选用户
  9. poj2226 Muddy Fields 填充棒子(二分匹配)
  10. matlab 图像模板匹配,基于MATLAB模板匹配的车牌识别系统