作者 王勇

为异步任务,添加线程池控制

package com.sunyo.wlpt.message.bus.service.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* @author 子诚
* Description:为异步任务,创建线程池
* 时间:2020/8/20 14:15
*/
@Configuration
public class TaskConfiguration {
@Bean("taskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 核心线程数
executor.setCorePoolSize(20);
// 最大线程数
executor.setMaxPoolSize(100);
// 缓冲队列
executor.setQueueCapacity(200);
// 允许线程的空闲时间
executor.setKeepAliveSeconds(60);
// 线程池名的前缀
executor.setThreadNamePrefix("taskExecutor-");
// 优雅的关闭线程池,
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setAwaitTerminationSeconds(60);
// 线程池对拒绝任务的处理策略,CallerRunsPolicy策略,当线程池没有处理能力的时候,该策略会直接在execute方法的调用线程中运行被拒绝的任务;
// 如果执行程序已关闭,则会丢弃该任务
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
}
... ...
... ... @@ -53,7 +53,7 @@ public class AsyncTaskService {
*
* @param sentData {@link XmlData}
*/
@Async
@Async("taskExecutor")
public void saveMessage(XmlData sentData)
{
// 无论消息是否发送成功,将消息存储于数据库
... ... @@ -64,7 +64,7 @@ public class AsyncTaskService {
* 当删除服务器的时候,级联删除与服务器有关的
* 虚拟主机,交换机,路由键,队列,绑定关系
*/
@Async
@Async("taskExecutor")
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public void serverCascadeDelete(BusServer busServer) throws IOException, TimeoutException
{
... ... @@ -105,7 +105,7 @@ public class AsyncTaskService {
* 当删除虚拟主机的时候,级联删除与虚拟主机有关的
* 交换机,路由键,队列,绑定关系
*/
@Async
@Async("taskExecutor")
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public void virtualHostCascadeDelete(VirtualHost virtualHost) throws IOException, TimeoutException
{
... ... @@ -143,7 +143,7 @@ public class AsyncTaskService {
* <p>
* 同时,删除包含该路由键的绑定关系
*/
@Async
@Async("taskExecutor")
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public void exchangeCascadeDelete(BusExchange busExchange)
{
... ... @@ -162,7 +162,7 @@ public class AsyncTaskService {
/**
* 当删除路由键的时候,删除包含该路由键的绑定关系
*/
@Async
@Async("taskExecutor")
public void routingKeyCascadeDelete(RoutingKey routingKey) throws IOException, TimeoutException
{
String routingKeyId = routingKey.getId();
... ... @@ -179,8 +179,8 @@ public class AsyncTaskService {
/**
* 当删除队列的时候,删除包含队列的绑定关系
*/
@Async
public void queueCascadeDelete(BusQueue busQueue)
@Async("taskExecutor")
public void queueCascadeDelete(BusQueue busQueue)
{
// 删除相关绑定关系
userMessageBindingService.deleteByQueueId(busQueue.getId());
... ...