fix(sse): SSE 改为按会话隔离 + 修 trace 租户 bug + 清理冗余

SSE 串台修复:
- SseEmitterManager 新增按 sessionId 维度的 connect/sendEvent/disconnect,
  每个会话一个 SSE 连接,替代原 userId+token 维度(同用户多会话串台)
- SseMessageDto 增加 sessionId + eventDto 字段,跨实例按会话路由
- SseTopicListener 优先按 sessionId 路由,回退原 userId/群发逻辑
- SseMessageUtils 增加 sessionId 重载,对话链路全部切换
- ChatServiceFacade / MyMcpClientListener / WorkflowStarter 切到 sessionId
- 通知/全局 /sse 端点保留 userId 模式(通知按用户)

trace 租户 bug 修复:
- trace_run / trace_node 加入 tenant.excludes,监控表跨租户全局可见,
  绕过异步线程租户上下文不传播导致 node 查不到的问题

冗余清理:
- 删除零使用的 @TraceNode 注解 + TraceNodeAspect 切面 + 对应单测
- TraceProperties 删除 recordDetail/maxInputLength/maxOutputLength
  (仅对已删切面生效,编程式埋点用 RagTracePayloadBuilder 不受影响)
- TracePayloadUtils 删除 input/output/asString 方法
- TraceConstants 删除无引用的 NODE_METHOD/HTTP/DB/CACHE/TASK/STREAM
- TraceContext 删除预留的 copyNodeStack
- TraceNodeVo 删除未用的 children 字段
- TraceRecordServiceImpl.getDetail 删除重复 enrich
- application.yml 删除 trace.payload 无效配置项
- RagTraceNodeTypes 删除无引用的 NODE_STREAM

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
ageerle
2026-07-23 15:35:10 +08:00
parent 11bb1dba0f
commit d1a820728f
21 changed files with 259 additions and 405 deletions

View File

@@ -146,6 +146,9 @@ tenant:
- sys_client
- sys_oss_config
- flow_spel
# 链路追踪监控表:运维需跨租户全局查看,且 trace_node 在异步线程写入、租户上下文不传播,故排除租户过滤
- trace_run
- trace_node
# MyBatisPlus配置
# https://baomidou.com/config/
@@ -238,15 +241,6 @@ trace:
# 关闭后所有埋点代码会直接透传业务逻辑,不写库、不创建上下文,零性能开销
enabled: true
payload:
# 是否记录方法真实入参和返回值,默认 false仅存摘要
# 仅对 @TraceNode 注解方式生效,编程式埋点使用 TracePayloadBuilder 手动构建的摘要不受此开关影响
# true → 自动序列化原始入参/返回值,截断后写入 input_payload / output_payload
# false → 只存 nodeName / 耗时 / 状态等元信息input_payload / output_payload 为空
record-detail: false
# input payload 最大字符长度,超过部分会被截断丢弃
max-input-length: 1000
# output payload 最大字符长度,超过部分会被截断丢弃
max-output-length: 2000
# 错误信息最大字符长度(格式: "异常类名: 异常消息"),超过部分会被截断丢弃
max-error-length: 1000