 yixiongandClaude
|
460a31b52f
|
feat(t14-s345): 群迁移 + 消息迁移 + 关系链迁移
T14 S3/S4/S5 阶段:
- S3 群迁移:getAppidGroups/getGroupInfo(老密钥拉)+ createGroup/addGroupMember(主密钥导入)+ migrateGroups
- S4 消息迁移:importMsg/importGroupMsg + migrateMessages(会话清单+断点续传,v1 最近7天/100条)
- S5 关系链:importFriend/friendGetList(sns 系列)+ migrateRoster
- 后台 /admin/migrate/{groups,messages,roster} 触发 + migrate.ftl 三表单
S1/S2 完整联调通过;S3/S4/S5 代码完成+通路验证(腾讯返业务响应),
核心导入待真实老应用(10003 群组/60008 消息/60002 关系链)。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-09 12:12:26 +08:00 |
|
 yixiongandClaude
|
7b1385e160
|
feat(t14-s1s2): 数据迁移基础设施 + 用户迁移
T14 数据迁移工具 S1/S2 阶段:
S1 基础设施:
- source_app/migrate_task 建表 + 实体 + Mapper
- TencentImClient 双密钥 callApiAs(老应用拉取,不走主应用限流,审计记 migrate)
- 后台「老应用配置」页(CRUD + 测试连通)
S2 用户迁移:
- batchImport(multiaccount_import,每批≤100)
- MigrateService.migrateUsers(前缀转换+导入+映射+校验,幂等)
- 后台「数据迁移」页(上传清单文件/粘贴列表 + 任务记录)
联调通过:3用户清单→加sa前缀→腾讯导入OK→user_mapping→校验3/3/3。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-09 11:12:25 +08:00 |
|
 yixiongandClaude
|
b4c6652f66
|
fix(review): 代码审查 6 项修复(M2/M3/m1/m2/m3/m5)
集中修复 T8/T9/T11/T15 已实现代码的审查问题:
- M2 令牌桶 Lua 改用 Redis TIME(消除多节点时钟偏斜)
- M3 after 跨租户标记复查授权 + 无授权告警兜底
- m1 before 审计 MsgSeq/MsgRandom null 防御
- m2 HealthService 加 forceDown 开关,实测 DOWN 真返 503
- m3 countByStatus 排除 done(WHERE status IN (0,1,3))
- m5 配额查询异常不缓存(下次重试)
- 附带 app.yml console charset GBK→UTF-8
M1 限流审计/事务收窄暂缓。
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-09 09:52:13 +08:00 |
|
 yixiongandClaude
|
8e2c66b363
|
feat(t15): 健康检查端点 /health(pg/redis/队列四态,DOWN 返503)
- DistQueueMapper: +countByStatus (GROUP BY status 一次拿全)
- HealthService(新): 聚合 pg 连通/redis ping/队列四态,status UP/DEGRADED/DOWN
- HealthController(新): GET /health,DOWN 返 503 便 LB 摘流;免租户鉴权(PathWhitelist)
- 联调:status=UP,pg/redis=UP,distQueue 四态 0,HTTP 200
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-09 08:50:15 +08:00 |
|
 yixiongandClaude
|
43f7d30e46
|
feat(t9): 按租户令牌桶限流(出站腾讯API配额保护,对齐设计3.2)
- RateLimiter(新): Redis+Lua 原子令牌桶,租户桶(quota_im_qps)+全局桶(globalImQps),
任一超限抛 BizException(429);Redis 异常 fail-open 放行
- RedisService: +eval(Lua) 通用脚本执行(令牌桶复合操作需原子)
- TencentImClient.callApi: 开头 checkApiLimit,resolveTenantQps 查 quota_im_qps(Caffeine 60s)
- 联调:sa quota=2,8 并发→2 放行+6 限流,被拒不调腾讯(api_call_log 仅 2 条)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-09 08:39:43 +08:00 |
|
 yixiongandClaude
|
e3a64bb861
|
fix(t8): 跨租户拦截对齐设计5.4——before阻断替代after额外分发
- CallbackServiceImpl: 新增 handleBeforeSendMsg 做 C2C.CallbackBeforeSendMsg
跨租户拦截决策(未授权返回 FAIL,腾讯不投递);after 移除「额外推 to 租户」,
is_cross_tenant 改在 after 标记;新增 fail() 响应(ErrorCode 80001)
- 解决旧实现(after 额外分发)无法阻断未授权跨租户消息的核心隔离缺陷
- 联调验证:before 同租户OK/无授权FAIL/有授权OK+审计;after 落库+按from分发
- 详见 实施记录第六章 + T8 跨租户拦截-方案决策记录.md
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-09 00:20:43 +08:00 |
|
 yixiongandClaude
|
8c9037fc4f
|
fix: 跨租户授权联调修复 + 新增分区自建模块
- CrossTenantServiceImpl: 有效期判断改用 apply("start_at <= now()"),规避
OffsetDateTime 绑定 timestamptz 比较异常(见实施记录 6.5)
- CallbackServiceImpl: 集成 C2C 跨租户授权检查(额外分发+审计+is_cross_tenant),
提取 enqueueIfConfigured
- 新增 PartitionService/Task: im_message 按月 RANGE 分区滚动建表
(当月+下月,@Init 启动自检 + 每日 0:10)
- 新增 CrossTenantService: 正反向授权匹配 + 跨租户审计
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-08 23:56:32 +08:00 |
|
 yixiongandClaude
|
d22fdcfaad
|
feat: 初始化腾讯IM分发工具骨架,含回调分发链路与历史消息补拉
- 应用骨架: Solon + MyBatis-Plus + PostgreSQL + Redis + Sa-Token
- 核心链路: 回调网关 → 消息落库(幂等) → 分发队列(FOR UPDATE SKIP LOCKED) → worker消费/重试/死信
- 多租户隔离: 前缀法账号映射, 所有业务表带 tenant_id
- 管理后台: FreeMarker 渲染, 租户/授权/队列/用量管理页面
- 历史消息补拉: 水位线驱动, getRoamMsg/getGroupMsg 增量拉取, 兜底回调丢失
- msg_key 统一算法(回调/补拉共享, 跨路径去重)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-07-08 20:28:32 +08:00 |
|