Commit Graph
6 Commits
Author SHA1 Message Date
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