Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

weixin-java-mp v4.5.0升级回归测试报错 #2995

Closed
panxiaochao opened this issue Apr 25, 2023 · 8 comments · Fixed by #2999
Closed

weixin-java-mp v4.5.0升级回归测试报错 #2995

panxiaochao opened this issue Apr 25, 2023 · 8 comments · Fixed by #2999

Comments

@panxiaochao
Copy link

panxiaochao commented Apr 25, 2023

简要描述

本次升级4.5.0版本,在回归测试中,出现报错信息:无法找到对应【default】的公众号配置信息,请核实!

模块版本情况

  • WxJava 模块名: weixin-java-mp
  • WxJava 版本号:4.5.0

详细描述

通过源码代码跟踪,发现与上一个版本(4.4.9.B)出现有点代码区别:
image
在4.5.0版本中发现这段代码,通过上下文查看,没有set的代码,所以这一段基本拿到的时候默认初始值default。
其中一个场景是:我在关注的时候,会报错。

麻烦看下!

@panxiaochao panxiaochao closed this as not planned Won't fix, can't repro, duplicate, stale Apr 25, 2023
@panxiaochao panxiaochao reopened this Apr 25, 2023
@panxiaochao panxiaochao reopened this Apr 25, 2023
@panxiaochao
Copy link
Author

panxiaochao commented Apr 26, 2023

我重新梳理了下代码逻辑,在WxPortalController.java中有一句this.wxService.switchover(appid)生效的。

有一种场景就是,目前在做的业务中,不存在多公众号,有的时候是单一公众号的,在上一个版本(4.4.9.B)是没有问题。

在现有版本(4.5.0)是需要加上了,由于在这个版本中加了那段代码。

不知道这个算不算一个小问题,虽然不严重。

@binarywang
Copy link
Owner

@biubiubiu3971

一起看下此问题,看有没有更好的处理办法

@biubiubiu3971
Copy link

@panxiaochao 谢谢反馈,请问调用WxMpMessageRouter中的的哪个入口方法呢?

@panxiaochao
Copy link
Author

@panxiaochao 谢谢反馈,请问调用WxMpMessageRouter中的的哪个入口方法呢?

是这样的,此问题在于监听事件,其实只要是我们在接入微信WxProtalController中,在this.messageRouter.route(message)之前没有WxMpConfigStorageHolder.set(AppId)就会出现这个问题,目前在demo中是因为有这句话this.wxService.switchover(appid)才避免的,因为在上下文中设置了appId。

目前是这样的,我们在开发中,可能是单一公众号,所以会删掉这句,这样的话,在新版中的那段就会出现这个报错问题,是否能明白我说的意思。

@biubiubiu3971
Copy link

@binarywang 默认的appId逻辑可能需要调整一下,不在线程变量中返回常量,默认appId用一个新变量存起来,设置默认appId的时候设置到这个变量里面,本地线程没有设置就返回这个默认的appId。我觉得这个可能是比较优的方案。你这边觉得呢?

@panxiaochao
Copy link
Author

@binarywang 默认的appId逻辑可能需要调整一下,不在线程变量中返回常量,默认appId用一个新变量存起来,设置默认appId的时候设置到这个变量里面,本地线程没有设置就返回这个默认的appId。我觉得这个可能是比较优的方案。你这边觉得呢?

@biubiubiu3971 你说的差不多和我本地实现差不多同个道理,我这边参数上在配置上加了个dafaultAppId,在多个情况下,如果不填默认走第一个AppId,同时开放一个AppID包装类,供外部使用,可以实时切换,解决了,多公众号动态切换问题,缓存方式采用和源码同个方式,内存和Redis都可以。

@biubiubiu3971
Copy link

@panxiaochao 我另外采用了别的方案,在父线程中获取最终使用的appId,传入子线程,尽量减少代码修改。

@springcloud-boot
Copy link

我不太理解,既然 WxMpMessageRouter的route(),既然wxMessage都拿到了,说明appid是确定的,为啥还要搞一个threadlocal去set

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants