diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java index 9cf43b770..8350593aa 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java @@ -75,6 +75,29 @@ public class WxMpMessageRouter { this.exceptionHandler = new LogExceptionHandler(); } + /** + *
+ * 使用自定义的 {@link ExecutorService}
+ *
+ */
+ public WxMpMessageRouter(WxMpService wxMpService, ExecutorService executorService) {
+ this.wxMpService = wxMpService;
+ this.executorService = executorService;
+ this.messageDuplicateChecker = new WxMessageInMemoryDuplicateChecker();
+ this.sessionManager = new StandardSessionManager();
+ this.exceptionHandler = new LogExceptionHandler();
+ }
+
+ /**
+ *
+ * 如果使用默认的 {@link ExecutorService},则系统退出前,应该调用该方法。
+ *
+ */
+ public void shutDownExecutorService() {
+ this.executorService.shutdown();
+ }
+
+
/**
*
* 设置自定义的 {@link ExecutorService}
diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
index 4b919a229..b9424eb02 100644
--- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
+++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/WxMpMessageRouterTest.java
@@ -8,6 +8,8 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.testng.*;
import org.testng.annotations.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
import java.util.Map;
/**
@@ -67,9 +69,23 @@ public class WxMpMessageRouterTest {
prepare(true, sb, router);
router.route(message);
Thread.sleep(500);
+ router.shutDownExecutorService();
Assert.assertEquals(sb.toString(), expected);
}
+ @Test(dataProvider = "messages-1")
+ public void testExternalExcutorService(WxMpXmlMessage message, String expected) throws InterruptedException {
+ StringBuffer sb = new StringBuffer();
+ ExecutorService executorService = Executors.newFixedThreadPool(100);
+ WxMpMessageRouter router = new WxMpMessageRouter(null, executorService);
+ prepare(true, sb, router);
+ router.route(message);
+ Thread.sleep(500);
+ executorService.shutdown();
+ Assert.assertEquals(sb.toString(), expected);
+ }
+
+
public void testConcurrency() throws InterruptedException {
final WxMpMessageRouter router = new WxMpMessageRouter(null);
router.rule().handler(new WxMpMessageHandler() {