 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 |
|
lianlonggang
|
20bd78baa8
|
Initial commit
|
2026-07-08 14:52:03 +08:00 |
|