### 简要描述 本次升级4.5.0版本,在回归测试中,出现报错信息:无法找到对应【default】的公众号配置信息,请核实! ### 模块版本情况 * WxJava 模块名: weixin-java-mp * WxJava 版本号:4.5.0 ### 详细描述 通过源码代码跟踪,发现与上一个版本(4.4.9.B)出现有点代码区别: <img width="1597" alt="image" src="https://user-images.githubusercontent.com/5567405/234220422-d2845bb8-c3ba-4da1-912b-3c299fabcd1e.png"> 在4.5.0版本中发现这段代码,通过上下文查看,没有set的代码,所以这一段基本拿到的时候默认初始值default。 其中一个场景是:我在关注的时候,会报错。 麻烦看下!
Activity
panxiaochao commentedon Apr 26, 2023
我重新梳理了下代码逻辑,在WxPortalController.java中有一句
this.wxService.switchover(appid)生效的。有一种场景就是,目前在做的业务中,不存在多公众号,有的时候是单一公众号的,在上一个版本(4.4.9.B)是没有问题。
在现有版本(4.5.0)是需要加上了,由于在这个版本中加了那段代码。
不知道这个算不算一个小问题,虽然不严重。
binarywang commentedon Apr 28, 2023
@biubiubiu3971
一起看下此问题,看有没有更好的处理办法
biubiubiu3971 commentedon Apr 28, 2023
@panxiaochao 谢谢反馈,请问调用WxMpMessageRouter中的的哪个入口方法呢?
panxiaochao commentedon Apr 28, 2023
是这样的,此问题在于监听事件,其实只要是我们在接入微信
WxProtalController中,在this.messageRouter.route(message)之前没有WxMpConfigStorageHolder.set(AppId)就会出现这个问题,目前在demo中是因为有这句话this.wxService.switchover(appid)才避免的,因为在上下文中设置了appId。目前是这样的,我们在开发中,可能是单一公众号,所以会删掉这句,这样的话,在新版中的那段就会出现这个报错问题,是否能明白我说的意思。
biubiubiu3971 commentedon Apr 29, 2023
@binarywang 默认的appId逻辑可能需要调整一下,不在线程变量中返回常量,默认appId用一个新变量存起来,设置默认appId的时候设置到这个变量里面,本地线程没有设置就返回这个默认的appId。我觉得这个可能是比较优的方案。你这边觉得呢?
panxiaochao commentedon Apr 29, 2023
@biubiubiu3971 你说的差不多和我本地实现差不多同个道理,我这边参数上在配置上加了个dafaultAppId,在多个情况下,如果不填默认走第一个AppId,同时开放一个AppID包装类,供外部使用,可以实时切换,解决了,多公众号动态切换问题,缓存方式采用和源码同个方式,内存和Redis都可以。
biubiubiu3971 commentedon Apr 29, 2023
@panxiaochao 我另外采用了别的方案,在父线程中获取最终使用的appId,传入子线程,尽量减少代码修改。
springcloud-boot commentedon Jun 2, 2023
我不太理解,既然 WxMpMessageRouter的route(),既然wxMessage都拿到了,说明appid是确定的,为啥还要搞一个threadlocal去set