`

spring线程池链路追踪

 
阅读更多

 

 

/**
 * 装饰MDC 内容传递
 */
public class MDCTaskDecorator implements TaskDecorator {
    @Override
    public Runnable decorate(Runnable runnable) {
        Map<String, String> contextMap = MDC.getCopyOfContextMap();
        // 对Runnable进行装饰,将主线程的MDC内容设置到子线程的MDC中
        return new Runnable() {
            @Override
            public void run() {
                try {
                    MDC.setContextMap(contextMap);
                    runnable.run();
                } finally {
                    MDC.clear();
                }
            }
        };
    }
}

 

/**
 * 通过实现 AsyncConfigurer 自定义异步任务线程池,包含异常处理
 */
@Component
@Slf4j
public class CustomAsyncConfigurer implements AsyncConfigurer {

    /**
     * 核心线程数
     */
    @Value("${thread.pool.corePoolSize:10}")
    private Integer corePoolSize;

    /**
     * 最大线程数
     * 注:因该线程池主要用于异步将订单结算信息入库,此操作属IO密集型,所以最大线程数可以适当大一些;
     * 假设每个任务执行50ms,则一个线程1s可执行20个任务,100个线程1s可执行2000个任务
     */
    @Value("${thread.pool.maxPoolSize:100}")
    private Integer maxPoolSize;

    /**
     * 队列容量
     */
    @Value("${thread.pool.queueCapacity:15000}")
    private Integer queueCapacity;

    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(corePoolSize);
        taskExecutor.setMaxPoolSize(maxPoolSize);
        taskExecutor.setQueueCapacity(queueCapacity);
        taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
        taskExecutor.setThreadFactory(new NamedThreadFactory("checkout"));
        taskExecutor.setTaskDecorator(new MDCTaskDecorator());//task装饰【重点】
        taskExecutor.initialize();
        return taskExecutor;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        // 针对标注 @Async 的方法内出现的异常会进入该异常处理器
        return new AsyncUncaughtExceptionHandler() {
            @Override
            public void handleUncaughtException(Throwable ex, Method method, Object... params) {
                log.error("线程池执行任务发生异常.", ex);
                for (Object param : params) {
                    log.info("Parameter value - " + param);
                }
            }
        };
    }
}

 

 

来源 :https://www.csdn.net/gather_2b/Mtjagg0sMjk0OTctYmxvZwO0O0OO0O0O.html

 

 

 

 

 

 

分享到:
评论

相关推荐

    Spring Cloud 学习案例,服务发现、服务治理、链路追踪、服务监控等

    Spring Cloud Sleuth 结合 Zipkin 或 Jaeger 等链路追踪系统,可以实现分布式系统中的日志跟踪,帮助开发者定位性能瓶颈和故障。Sleuth 会在每个微服务的请求中添加独特的追踪 ID,从而在多个服务之间串联起完整的...

    一个轻量级的分布式日志标记追踪神器,10分钟即可接入,自动对日志打标签完成微服务的链路追踪

    TLog是一个轻量级的分布式日志标记追踪神器,10分钟即可接入,自动对日志打标签完成微服务的链路追踪。支持log4j,log4j2,logback三大日志框架,支持dubbo,dubbox,springcloud三大RPC框架。通过对日志打标签完成...

    2-分布式高级篇 _SpringCloud系统_spring_谷粒商城_分布式_分布式高级篇_

    RabbitMQ柔性事务方案、SpringCloud-Gateway网关、Feign远程调用、Sleuth+Zipkin链路追踪系统、Spring Cache缓存、SpringSession跨子域Session同步方案、基于ElasticSearch7全文检索、异步编排与线程池、压力测试...

    SpringCloud 全套视频下载

    Sleuth是Spring Cloud Sleuth项目提供的分布式链路追踪工具,它能够帮助开发者追踪整个服务调用链路上的数据流转情况。通过Sleuth,可以方便地监控和调试分布式系统中的问题,提高问题排查效率。 #### 7. Feign:...

    SpringCloud微服务、链路跟踪、分布式配置、分布式网关

    2. **分布式链路跟踪**:Zipkin是用于收集服务间调用链路数据的系统,它提供了追踪服务请求在整个系统中传播过程的能力。在SpringCloud中,我们可以集成Zipkin客户端,通过Brave库将日志发送到Zipkin服务器,以便...

    springcloud全家桶(eureka+ribbon+feign+hystrix+turbine)

    全链路traceId追踪 velocity 前端模板 mybatis, pageHelper (分页), druid (连接池) redis(序列化采用的是jdk默认序列化方案) slf4j & logback(及其配置) 国际化配置 全局错误信息catch 线程池 服务健康检查, 服务...

    Spring Cloud视频教学

    - **链路追踪**:Sleuth提供了分布式链路追踪的支持,可以记录下每一次请求的完整调用链路。 - **数据可视化**:Zipkin作为Sleuth的后端存储,可以将链路追踪的数据以图形界面的形式展示出来。 9. **Gateway** -...

    springcloud.zip

    全链路traceId追踪 velocity 前端模板 mybatis, pageHelper (分页), druid (连接池) redis(序列化采用的是jdk默认序列化方案) slf4j & logback(及其配置) 国际化配置 全局错误信息catch 线程池 服务健康检查, 服务...

    从头分析一则traceId穿透问题(附解决方案).docx

    Spring Cloud Sleuth是Spring Cloud生态系统中用于实现链路追踪的一个模块。它主要功能是在分布式系统中提供追踪解决方案,并且兼容支持Zipkin,提供链路追踪的可视化功能。Sleuth对Zipkin进行了封装,包括HTTP请求...

    day02-SpringCloud02

    Sleuth提供了分布式跟踪解决方案,整合了Zipkin、HTrace等追踪系统,帮助我们理解和优化服务间的调用链路。 通过"day02-SpringCloud02"的学习,你将具备构建和管理高可用、弹性的微服务架构的能力,同时对Spring ...

    LCN适配springcloud2.0的jar包

    7. **日志追踪**:为了方便问题排查,LCN支持日志追踪,可以集成Zipkin、Sleuth等分布式追踪工具,记录服务调用的完整链路。 8. **测试与优化**:在完成上述配置和代码编写后,需要对系统进行充分的测试,包括单元...

    java学习积累

    9. **Spring Cloud Sleuth链路追踪**:掌握如何追踪分布式系统中的请求,便于问题排查。 10. **Spring Cloud Data Flow数据流管理**:了解数据流的创建和管理,实现流处理。 在实际项目构建中,还需要关注Docker...

    springboot-admin3.1.x监控服务器端

    这项功能通常结合像 Brave 或 Zipkin 这样的分布式追踪系统来实现,它们可以提供请求在整个服务网格中的完整调用链路,帮助我们定位性能瓶颈或错误源。 为了启用 HTTP 跟踪,你需要在 SpringBoot Admin 服务器端和...

    TLog分布式日志标记追踪器-其他

    TLog是一个轻量级的分布式日志标记追踪神器,10分钟即可接入,自动对日志打标签完成微服务的链路追踪。支持log4j,log4j2,logback三大日志框架,支持dubbo,dubbox,springcloud三大RPC框架。 特性: 通过对日志打...

    SpringCloud_learing

    6. **服务调用链追踪**:SpringCloud Sleuth与Zipkin集成,实现了服务调用链的追踪,便于问题排查和性能优化。 三、关键组件详解 1. **Eureka**:每个服务启动时,都会向Eureka注册自身信息,并定期发送心跳以保持...

    Java后端学习路线梳理(csdn)————程序.pdf

    搜索引擎如ElasticSearch和Solr,以及分布式和微服务相关技术(服务发现/注册、网关、服务调用、熔断/降级、配置中心、认证鉴权、分布式事务、任务调度、链路追踪和监控、日志分析和监控)也是必备技能。 最后,...

    系统稳定性——Dubbo 常见错误及解决方法1

    网络问题也可能导致超时,可通过检查重传率和使用链路追踪工具(如ARMS、Zipkin、SkyWalking)来定位耗时点。 3. **服务端线程资源耗尽:Thread pool is EXHAUSTED** Dubbo服务端默认线程池大小为200,当并发请求...

    Java后端学习路线1

    分布式技术包括数据持久化、集群、缓存(如Redis)、消息队列、服务发现(如Eureka、Consul、Zookeeper、Nacos)、API Gateway(...链路追踪(如Zipkin、Sleuth、Skywalking)以及日志分析(如ELK、Logstash、Kibana)...

    Sentinel.zip

    5. **分布式链路追踪**:通过与Zipkin、Skywalking等分布式追踪系统集成,Sentinel 可以记录服务调用的链路信息,帮助开发者分析系统瓶颈。 6. **控制台**:Sentinel 提供了Web控制台,可以实时监控应用的流量、...

Global site tag (gtag.js) - Google Analytics