瀏覽代碼

:bug: #2999【小程序/公众号】修复异步消息路由报错的问题

heiheihei 2 年之前
父節點
當前提交
de0266b5e1

+ 5 - 1
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/message/WxMaMessageRouter.java

@@ -128,16 +128,20 @@ public class WxMaMessageRouter {
     if (matchRules.size() == 0) {
       return null;
     }
-    String miniAppId = WxMaConfigHolder.get();
+
     final List<Future<?>> futures = new ArrayList<>();
     WxMaXmlOutMessage result = null;
     for (final WxMaMessageRouterRule rule : matchRules) {
       // 返回最后一个非异步的rule的执行结果
       if (rule.isAsync()) {
+        //获取当前线程使用的实际appId,兼容只有一个appId,且未显式设置当前使用的appId的情况
+        String miniAppId = this.wxMaService.getWxMaConfig().getAppid();
         futures.add(
           this.executorService.submit(() -> {
+            //子线程中设置实际的appId
             this.wxMaService.switchoverTo(miniAppId);
             rule.service(wxMessage, context, WxMaMessageRouter.this.wxMaService, WxMaMessageRouter.this.sessionManager, WxMaMessageRouter.this.exceptionHandler);
+            WxMaConfigHolder.remove();
           })
         );
       } else {

+ 4 - 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMessageRouter.java

@@ -248,16 +248,19 @@ public class WxMpMessageRouter {
 
     WxMpXmlOutMessage res = null;
     final List<Future<?>> futures = new ArrayList<>();
-    String appId = WxMpConfigStorageHolder.get();
+
     for (final WxMpMessageRouterRule rule : matchRules) {
       // 返回最后一个非异步的rule的执行结果
       if (rule.isAsync()) {
+        //获取当前线程使用的实际appId。兼容只有一个appId,且未显式设置当前使用的appId的情况
+        String appId = this.wxMpService.getWxMpConfigStorage().getAppId();
         futures.add(
           this.executorService.submit(() -> {
             //传入父线程的appId
             this.wxMpService.switchoverTo(appId);
             rule.service(wxMessage, context, mpService, WxMpMessageRouter.this.sessionManager,
               WxMpMessageRouter.this.exceptionHandler);
+            WxMpConfigStorageHolder.remove();
           })
         );
       } else {