标准答案

  1. HTTP 或 RPC 调用应使用统一 Trace Context 标准传播 trace ID、span ID 和采样状态,服务端创建新的子 Span。
  2. 生产消息时把必要的 trace context 放在消息头,消费时提取并以消息处理 Span 继续链路。
  3. 跨线程、连接池、重试和批量消费要明确上下文边界;一次消息重试应能关联原事件和当前尝试。
  4. 传播字段只放追踪所需信息,租户和用户上下文要按权限、脱敏和生命周期单独处理。

题目解析

同步请求通常有清晰的父子 Span,异步消息则把一次生产和多次消费、重试、批量处理连接成因果链。生产 Span、事件 ID、消费 Span 和尝试次数都要能互相关联。

跨线程、连接池和消息边界要显式提取和注入 Trace Context,不能依赖线程本地变量自动延续。批量消费可以有批次 Span,但单条失败仍要保留事件 ID 和独立结果。

传播字段只放追踪所需的信息,租户、用户和授权上下文要按安全和生命周期单独设计。Trace ID 能帮助排查,不能替代身份验证或权限判断。

常见误区

  • 误区:只在应用日志打印 request ID,不传播到消息。改正:把 Trace Context 和事件 ID写入消息头或关联字段,消费时创建新的处理 Span。
  • 误区:把完整用户信息放进消息头。改正:最小化传播、脱敏并控制保留期,权限在消费资源处重新校验。
  • 误区:批量消费只复用一个 Span。改正:保留批次关联,同时为失败和重试记录单条事件与尝试信息。

作者信息