package com.ard.work.config;
|
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.scheduling.annotation.EnableAsync;
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|
import java.util.concurrent.Executor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
|
@Configuration
|
@EnableAsync
|
public class AsyncConfiguration {
|
/**
|
* 相机SDK专用异步线程池
|
*/
|
@Bean("cameraSdkExecutor")
|
public Executor cameraSdkExecutor() {
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
// 核心线程数:根据业务并发量调整
|
executor.setCorePoolSize(10);
|
// 最大线程数
|
executor.setMaxPoolSize(50);
|
// 队列容量
|
executor.setQueueCapacity(500);
|
// 线程空闲时间
|
executor.setKeepAliveSeconds(60);
|
// 线程名前缀
|
executor.setThreadNamePrefix("camera-sdk-");
|
// 拒绝策略:队列满时由调用线程执行(避免任务丢失)
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
// 初始化
|
executor.initialize();
|
return executor;
|
}
|
/**
|
* 相机任务线程池(控制相机并发)
|
*/
|
@Bean("cameraPTZExecutor")
|
public ThreadPoolTaskExecutor cameraPTZExecutor() {
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
executor.setCorePoolSize(20);
|
executor.setMaxPoolSize(50);
|
executor.setQueueCapacity(200);
|
executor.setKeepAliveSeconds(60);
|
executor.setThreadNamePrefix("camera-ptz-");
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
executor.initialize();
|
return executor;
|
}
|
|
/**
|
* SDK调用线程池(防止SDK卡死拖垮主线程池)
|
*/
|
@Bean("timeoutExecutor")
|
public ThreadPoolTaskExecutor timeoutExecutor() {
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
executor.setCorePoolSize(50);
|
executor.setMaxPoolSize(100);
|
executor.setQueueCapacity(500);
|
executor.setKeepAliveSeconds(60);
|
executor.setThreadNamePrefix("camera-timeout-");
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
|
executor.initialize();
|
return executor;
|
}
|
|
/**
|
* WebSocket推送线程池(避免慢客户端阻塞调度线程)
|
* DiscardOldestPolicy: 推送任务允许丢弃旧消息以保证实时性
|
*/
|
@Bean("wsPushExecutor")
|
public ThreadPoolTaskExecutor wsPushExecutor() {
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
executor.setCorePoolSize(4);
|
executor.setMaxPoolSize(16);
|
executor.setQueueCapacity(2000);
|
executor.setKeepAliveSeconds(60);
|
executor.setThreadNamePrefix("ws-push-");
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());
|
executor.initialize();
|
return executor;
|
}
|
}
|