Sleuth扩展应用 【一】

Sleuth

依赖版本

  • Spring cloud 版本是 Hoxton.SR10

  • Spring boot 版本是 2.3.10.RELEASE

  • 依赖

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

     

Sleuth 应用配置

  • 扩展配置 对应类 SleuthBaggageProperties

    spring:
      sleuth:
        baggage:
          remoteFields:
            - uid
            - uname
            - x-b3-uage
          correlationFields:
            - uid
          localFields:
            - uid
    • remoteFields 代表是远程属性该属性会进入系统时填充,出系统时携带出去

      • 比如:Servlet 容器

        • 在进系统时 brave.servlet.TracingFilter 过滤器拦截处理

          • reactor 实现入口 org.springframework.cloud.sleuth.instrument.web.TraceWebFilter

      • 比如:Feign 框架

        • 在出系统时 org.springframework.cloud.sleuth.instrument.web.client.feign.TracingFeignClient 通过代理拦截处理

    • correlationFields

      • 比如:org.slf4j.MDC#getCopyOfContextMap

    • localFields 只用于本地

Sleuth 扩展应用

Rpc 示例

  • 接受请求时

            RpcServerHandler rpcServerHandler =  RpcServerHandler.create(RpcTracing.create(tracing));
            RpcServerRequest request = new RpcServerRequest(){
    ​
                @Override
                public Object unwrap() {
                    return null;
                }
    ​
                @Override
                public String method() {
                    return null;
                }
    ​
                @Override
                public String service() {
                    return null;
                }
            };
            Span span = rpcServerHandler.handleReceive(request);
    ​
            Scope scope = tracing.currentTraceContext().newScope(span.context());
            // 业务逻辑
            scope.close();
  • 发起请求时

            RpcClientHandler rpcClientHandler = RpcClientHandler.create(RpcTracing.create(tracing));
            RpcClientRequest rpcClientRequest = new RpcClientRequest() {
                @Override
                public String method() {
                    return null;
                }
    ​
                @Override
                public String service() {
                    return null;
                }
    ​
                @Override
                public Object unwrap() {
                    return null;
                }
    ​
                @Override
                protected void propagationField(String keyName, String value) {
                    super.propagationField(keyName, value);
                }
            };
            span = rpcClientHandler.handleSend(rpcClientRequest);
            scope = tracing.currentTraceContext().newScope(span.context());
            // 业务逻辑
            scope.close();

     

异步示例

  • 自定义线程池

        @Bean("DefaultTaskExecutor")
        public AsyncTaskExecutor asyncExecutor(Tracing tracing, SpanNamer spanNamer) {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    ​
            executor.setTaskDecorator(new DefaultTaskDecorator(tracing,spanNamer));
            executor.setCorePoolSize(1);
            executor.setMaxPoolSize(2);
    ​
            executor.setWaitForTasksToCompleteOnShutdown(true);
            executor.setThreadNamePrefix("sleuth-");
            executor.initialize();
            return executor;
        }
  • 自定义线程池之前传递处理适配

    public class DefaultTaskDecorator  implements TaskDecorator {
    ​
        private final Tracing tracing;
        private final SpanNamer spanNamer;
    ​
        public DefaultTaskDecorator(Tracing tracing, SpanNamer spanNamer) {
            this.tracing = tracing;
            this.spanNamer = spanNamer;
        }
    ​
    ​
        @Override
        public Runnable decorate(Runnable runnable) {
            return new TraceRunnable(tracing,spanNamer,runnable);
        }
    }

    org.springframework.cloud.sleuth.instrument.async.TraceRunnable

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值