1. 前文回顾和优化需求分析
前面两篇文章已经让《手写链路追踪》略有小成
前文1:手写链路追踪
前文2:手写链路追踪优化-自动全局追踪代替局部手动追踪
有没有想过,如果多线程环境,它能追踪异步线程日志吗?接下来我们先验证多线程的情况。
1.1 添加多线程测试代码
增加异步配置
package com.sandwich.logtracing.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.lang.NonNull;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
/**
* @Author 公众号: IT三明治
* @Date 2025/8/30
* @Description: the config for async task
*/
@Configuration
@EnableAsync
public class AsyncConfiguration implements AsyncConfigurer {
@Override
@NonNull
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("async-thread-");
executor.initialize();
return executor;
}
}
增加登录的异步接口和同步接口
package com.sandwich.logtracing.service;
/**
* @Author 公众号: IT三明治
* @Date 2025/8/30
* @Description:
*/
public interface LoginService {
void asyncLoginSteps(String username) throws InterruptedException;
void blockedThreadLoginSteps(String username) throws InterruptedException;
}
增加登录的异步接口和同步接口的实现
package com.sandwich.logtracing.service.impl;
import com.sandwich.logtracing.service.LoginService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
/**
* @Author 公众号: IT三明治
* @Date 2025/8/30
* @Description:
*/
@Slf4j
@Service
public class LoginServiceImpl implements LoginService {
@Override
@Async
public void asyncLoginSteps(String username) throws InterruptedException
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...