1
0
mirror of synced 2025-12-18 05:47:58 +08:00

🎨 #2583 【企业微信】增加路由线程池关闭的方法,当通过http优雅关闭时需要调用,否则java进程不会结束

This commit is contained in:
nadirvishun
2022-04-11 15:21:47 +08:00
committed by Binary Wang
parent b00e938ef7
commit 63c0eb107e
3 changed files with 110 additions and 25 deletions

View File

@@ -76,6 +76,41 @@ public class WxCpMessageRouter {
this.exceptionHandler = new LogExceptionHandler(); this.exceptionHandler = new LogExceptionHandler();
} }
/**
* 使用自定义的 {@link ExecutorService}.
*/
public WxCpMessageRouter(WxCpService wxMpService, ExecutorService executorService) {
this.wxCpService = wxMpService;
this.executorService = executorService;
this.messageDuplicateChecker = new WxMessageInMemoryDuplicateChecker();
this.sessionManager = wxCpService.getSessionManager();
this.exceptionHandler = new LogExceptionHandler();
}
/**
* 系统退出前,应该调用该方法
*/
public void shutDownExecutorService() {
this.executorService.shutdown();
}
/**
* 系统退出前,应该调用该方法,增加了超时时间检测
*/
public void shutDownExecutorService(Integer second) {
this.executorService.shutdown();
try {
if (!this.executorService.awaitTermination(second, TimeUnit.SECONDS)) {
this.executorService.shutdownNow();
if (!this.executorService.awaitTermination(second, TimeUnit.SECONDS))
log.error("线程池未关闭!");
}
} catch (InterruptedException ie) {
this.executorService.shutdownNow();
Thread.currentThread().interrupt();
}
}
/** /**
* <pre> * <pre>
* 设置自定义的 {@link ExecutorService} * 设置自定义的 {@link ExecutorService}

View File

@@ -78,6 +78,41 @@ public class WxCpTpMessageRouter {
this.exceptionHandler = new LogExceptionHandler(); this.exceptionHandler = new LogExceptionHandler();
} }
/**
* 使用自定义的 {@link ExecutorService}.
*/
public WxCpTpMessageRouter(WxCpTpService wxCpTpService, ExecutorService executorService) {
this.wxCpTpService = wxCpTpService;
this.executorService = executorService;
this.messageDuplicateChecker = new WxMessageInMemoryDuplicateChecker();
this.sessionManager = wxCpTpService.getSessionManager();
this.exceptionHandler = new LogExceptionHandler();
}
/**
* 系统退出前,应该调用该方法
*/
public void shutDownExecutorService() {
this.executorService.shutdown();
}
/**
* 系统退出前,应该调用该方法,增加了超时时间检测
*/
public void shutDownExecutorService(Integer second) {
this.executorService.shutdown();
try {
if (!this.executorService.awaitTermination(second, TimeUnit.SECONDS)) {
this.executorService.shutdownNow();
if (!this.executorService.awaitTermination(second, TimeUnit.SECONDS))
log.error("线程池未关闭!");
}
} catch (InterruptedException ie) {
this.executorService.shutdownNow();
Thread.currentThread().interrupt();
}
}
/** /**
* <pre> * <pre>
* 设置自定义的 {@link ExecutorService} * 设置自定义的 {@link ExecutorService}
@@ -215,8 +250,7 @@ public class WxCpTpMessageRouter {
messageId.append(wxMessage.getMsgId()) messageId.append(wxMessage.getMsgId())
.append("-").append(wxMessage.getCreateTime()) .append("-").append(wxMessage.getCreateTime())
.append("-").append(wxMessage.getFromUserName()); .append("-").append(wxMessage.getFromUserName());
} } else {
else {
messageId.append(wxMessage.getMsgType()) messageId.append(wxMessage.getMsgType())
.append("-").append(wxMessage.getCreateTime()) .append("-").append(wxMessage.getCreateTime())
.append("-").append(wxMessage.getFromUserName()) .append("-").append(wxMessage.getFromUserName())

View File

@@ -89,12 +89,28 @@ public class WxMpMessageRouter {
} }
/** /**
* 如果使用默认的 {@link ExecutorService},则系统退出前,应该调用该方法. * 系统退出前,应该调用该方法
*/ */
public void shutDownExecutorService() { public void shutDownExecutorService() {
this.executorService.shutdown(); this.executorService.shutdown();
} }
/**
* 系统退出前,应该调用该方法,增加了超时时间检测
*/
public void shutDownExecutorService(Integer second) {
this.executorService.shutdown();
try {
if (!this.executorService.awaitTermination(second, TimeUnit.SECONDS)) {
this.executorService.shutdownNow();
if (!this.executorService.awaitTermination(second, TimeUnit.SECONDS))
log.error("线程池未关闭!");
}
} catch (InterruptedException ie) {
this.executorService.shutdownNow();
Thread.currentThread().interrupt();
}
}
/** /**
* <pre> * <pre>