Title: 添加多租户共享模式以优化资源使用 by Copilot · Pull Request #3840 · binarywang/WxJava · GitHub
Open Graph Title: 添加多租户共享模式以优化资源使用 by Copilot · Pull Request #3840 · binarywang/WxJava
X Title: 添加多租户共享模式以优化资源使用 by Copilot · Pull Request #3840 · binarywang/WxJava
Description: Spring Boot Starter 的多租户实现为每个租户创建独立的 WxService 实例和 HTTP 客户端,而基础 SDK 类已支持通过 configMap 管理多配置。这导致 100 个租户需要 100 个 HTTP 客户端(~500MB)。
解决方案
新增可配置的多租户模式,默认保持现有行为:
ISOLATED(默认):每租户独立实例,线程安全,适合异步场景
SHARED(新增):单实例 + configMap,共享 HTTP 客户端,节省 ~90% 内存
实现
配置属性:
wx:
ma: # 或 mp
apps:
tenant1:
app-id: wx123
app-secret: secret1
tenant2:
app-id: wx456
app-secret: secret2
config-storage:
multi-tenant-mode: shared # isolated | shared
代码使用(两种模式 API 完全一致):
@Autowired
private WxMaMultiServices services;
WxMaService wxService = services.getWxMaService(tenantId);
wxService.getUserService().getUserInfo(...);
变更范围
新增类:
WxMaMultiServicesSharedImpl / WxMpMultiServicesSharedImpl
新增配置:
MultiTenantMode 枚举(ISOLATED, SHARED)
multi-tenant-mode 配置项
重构:
AbstractWxMaConfiguration / AbstractWxMpConfiguration 支持模式选择
使用 TreeMap 保证默认租户选择的确定性
支持模块
✅ 小程序(MiniApp)
✅ 公众号(MP)
注意事项
共享模式依赖 ThreadLocal 切换配置,异步场景需预先获取配置信息:
// ❌ 错误
CompletableFuture.runAsync(() -> wxService.getAccessToken());
// ✅ 正确
String token = wxService.getAccessToken();
CompletableFuture.runAsync(() -> process(token));
向后兼容
完全兼容。未配置 multi-tenant-mode 时使用 ISOLATED 模式,行为与旧版本一致。
Original prompt
This section details on the original issue you should resolve
Open Graph Description: Spring Boot Starter 的多租户实现为每个租户创建独立的 WxService 实例和 HTTP 客户端,而基础 SDK 类已支持通过 configMap 管理多配置。这导致 100 个租户需要 100 个 HTTP 客户端(~500MB)。 解决方案 新增可配置的多租户模式,默认保持现有行为: ISOLATED(默认):每租户独立实例,线程安全,适合异步场景 SHARED(...
X Description: Spring Boot Starter 的多租户实现为每个租户创建独立的 WxService 实例和 HTTP 客户端,而基础 SDK 类已支持通过 configMap 管理多配置。这导致 100 个租户需要 100 个 HTTP 客户端(~500MB)。 解决方案 新增可配置的多租户模式,默认保持现有行为: ISOLATED(默认):每租户独立实例,线程安全,适合异步场景 SHARED(...
Opengraph URL: https://github.com/binarywang/WxJava/pull/3840
X: @github
Domain: patch-diff.githubusercontent.com
| route-pattern | /:user_id/:repository/pull/:id/files(.:format) |
| route-controller | pull_requests |
| route-action | files |
| fetch-nonce | v2:28d100fe-312a-18b1-ff12-8382abe01462 |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | 802C:2AB245:8CE7E7F:B9B9946:696DF036 |
| html-safe-nonce | 57fd2b98723bb451c1551301a10fe23740d20f4568fb9511cdd737be54fb2d48 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4MDJDOjJBQjI0NTo4Q0U3RTdGOkI5Qjk5NDY6Njk2REYwMzYiLCJ2aXNpdG9yX2lkIjoiNjYxODM0ODc0NTgwNjE4MDQwNiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 34e9f49dc7f95bcece328ec823c2c3eddc391783d574364bf1d8d1df5e6a25a0 |
| hovercard-subject-tag | pull_request:3158547134 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/binarywang/WxJava/pull/3840/files |
| twitter:image | https://avatars.githubusercontent.com/in/1143301?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/in/1143301?s=400&v=4 |
| og:image:alt | Spring Boot Starter 的多租户实现为每个租户创建独立的 WxService 实例和 HTTP 客户端,而基础 SDK 类已支持通过 configMap 管理多配置。这导致 100 个租户需要 100 个 HTTP 客户端(~500MB)。 解决方案 新增可配置的多租户模式,默认保持现有行为: ISOLATED(默认):每租户独立实例,线程安全,适合异步场景 SHARED(... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 4922b452d03cd8dbce479d866a11bc25b59ef6ee2da23aa9b0ddefa6bd4d0064 |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/binarywang/WxJava git https://github.com/binarywang/WxJava.git |
| octolytics-dimension-user_id | 1343140 |
| octolytics-dimension-user_login | binarywang |
| octolytics-dimension-repository_id | 49122742 |
| octolytics-dimension-repository_nwo | binarywang/WxJava |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 49122742 |
| octolytics-dimension-repository_network_root_nwo | binarywang/WxJava |
| turbo-body-classes | logged-out env-production page-responsive full-width |
| disable-turbo | true |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7e5ae23c70136152637ceee8d6faceb35596ec46 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width