V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tianwaifeixian
V2EX  ›  程序员

求助: grpc 服务端拦截器中使用 transmittable-thread-local, ttlContext 中获取数据不正确

  •  
  •   tianwaifeixian · Sep 26, 2023 · 1306 views
    This topic created in 956 days ago, the information mentioned may be changed or developed.
    • 背景:grpc 客户端 header 会携带 requestId 请求 grpc 服务端,在 grpc 服务端实现 ServerInterceptor 拦截器,将 requestId 写入到 ttlContext ,以供后续业务使用
    • 问题:grpc 客户端 header 传递 requestId 字段时,业务可以正常从 ttlContext 获取到值,当 grpc 客户端再一次请求过来不携带 requestId 时,ttlContext 中会获取到上次一次的 requestId 值,打断点确认上一次执行请求结束对 ttlContext 进行了清空,但是打断点发现第二次请求一进入拦截器 ttlContext 就已经有上次的值,求大佬解惑
    2 replies    2023-09-27 18:10:36 +08:00
    SilenceLL
        1
    SilenceLL  
       Sep 27, 2023
    看下有没有传给子线程或者线程池使用,也要清除一下。
    tianwaifeixian
        2
    tianwaifeixian  
    OP
       Sep 27, 2023
    @SilenceLL 谢谢,找到问题了,是因为重写了 ThreadLocal init 方法,传了一个 hashMap 进去,调用 ThreadLocal 的 remove 方法只清除了引用,map 没有清空
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2902 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:40 · PVG 20:40 · LAX 05:40 · JFK 08:40
    ♥ Do have faith in what you're doing.