当前位置: 首页 > news >正文

[spring6: 分布式追踪]-实战

部署

docker run -d -p 9411:9411 openzipkin/zipkin

依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing</artifactId><version>1.5.2</version></dependency><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bridge-brave</artifactId><version>1.5.2</version></dependency><dependency><groupId>io.zipkin.reporter2</groupId><artifactId>zipkin-reporter-brave</artifactId><version>3.5.1</version></dependency><dependency><groupId>io.zipkin.reporter2</groupId><artifactId>zipkin-sender-urlconnection</artifactId><version>3.5.1</version></dependency>
</dependencies>

配置

spring:application:name: demo-servicemanagement:tracing:sampling:probability: 1.0zipkin:tracing:endpoint: http://localhost:9411/api/v2/spanslogging:pattern:correlation: "[${spring.application.name:},%X{traceId:-},%X{spanId:-}]"include-application-name: false

代码

@Configuration
public class SpanAspectConfiguration {@BeanNewSpanParser newSpanParser() {return new DefaultNewSpanParser();}@BeanValueResolver valueResolver() {return new NoOpValueResolver();}@BeanValueExpressionResolver valueExpressionResolver() {return new SpelTagValueExpressionResolver();}@BeanMethodInvocationProcessor methodInvocationProcessor(NewSpanParser newSpanParser, Tracer tracer, BeanFactory beanFactory) {return new ImperativeMethodInvocationProcessor(newSpanParser, tracer, beanFactory::getBean, beanFactory::getBean);}@BeanSpanAspect spanAspect(MethodInvocationProcessor methodInvocationProcessor) {return new SpanAspect(methodInvocationProcessor);}}class SpelTagValueExpressionResolver implements ValueExpressionResolver {private static final Log log = LogFactory.getLog(SpelTagValueExpressionResolver.class);@Overridepublic String resolve(String expression, Object parameter) {try {SimpleEvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();ExpressionParser expressionParser = new SpelExpressionParser();Expression expressionToEvaluate = expressionParser.parseExpression(expression);return expressionToEvaluate.getValue(context, parameter, String.class);}catch (Exception ex) {log.error("Exception occurred while tying to evaluate the SpEL expression [" + expression + "]", ex);}return parameter.toString();}}
@RestController
@SpringBootApplication
@EnableAspectJAutoProxy(exposeProxy = true)
public class Application {@NewSpan("add")@GetMapping("/add")public String add(@SpanTag("a") @RequestParam Double a, @SpanTag("b") @RequestParam Double b) {Application proxy = (Application) AopContext.currentProxy();Double result = proxy.add1(a + b);return proxy.str(result);}@ContinueSpan(log = "/add1")public Double add1(Double result) {return result + 1;}@ContinueSpan(log = "/str")public String str(Double result) {return String.valueOf(result);}public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

跟踪localhost:8080/add?a=1.0&b=2

http://localhost:9411

http://www.lryc.cn/news/607888.html

相关文章:

  • AI赋能测试:技术变革与应用展望
  • 在ChinaJoy ,Soul发布“莫比乌斯·第三弹”ChinaJoy特别款
  • 深入 Go 底层原理(十二):map 的实现与哈希冲突
  • 高性能实时分析数据库:Apache Druid 查询数据 Query data
  • RK3399 启动流程 --从复位到系统加载
  • 变频器实习DAY20 测试经验总结
  • .NET 中,Process.Responding 属性用于检查进程的用户界面是否正在响应
  • 【嵌入式汇编基础】-ARM架构基础(三)
  • u-boot启动过程(NXP6ULL)
  • 网络常识-子网掩码
  • 音视频学习(四十四):音频处理流程
  • Oracle 11g RAC集群部署手册(三)
  • PHP面向对象编程与数据库操作完全指南-上
  • Redis 核心概念、命令详解与应用实践:从基础到分布式集成
  • C语言字符函数和字符串函数全解析:从使用到模拟实现
  • 力扣面试150题--回文数
  • 2411. 按位或最大的最小子数组长度
  • 历史数据分析——中青旅
  • OneCode 3.0智能分页拦截器深度解析:从拦截机制到性能优化
  • 仿muduo库实现高并发服务器
  • flink写paimon表的过程解析
  • 华为核心交换机S7700的内存OID
  • Unity_数据持久化_XML基础
  • MATLAB科研数据可视化技术
  • LPVIMO-SAM:基于多传感器紧耦合的高精度鲁棒SLAM系统
  • Noob靶机
  • VueX进阶Pinia
  • VScode对Ubuntu用root账号进行SSH远程连接开发
  • 技巧|SwanLab记录混淆矩阵攻略
  • 解决忘记修改配置密码而无法连接nacos的问题