V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tianwaifeixian
V2EX  ›  程序员

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

  •  
  •   tianwaifeixian · 2023-09-26 17:43:46 +08:00 · 616 次点击
    这是一个创建于 408 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 背景:grpc 客户端 header 会携带 requestId 请求 grpc 服务端,在 grpc 服务端实现 ServerInterceptor 拦截器,将 requestId 写入到 ttlContext ,以供后续业务使用
    • 问题:grpc 客户端 header 传递 requestId 字段时,业务可以正常从 ttlContext 获取到值,当 grpc 客户端再一次请求过来不携带 requestId 时,ttlContext 中会获取到上次一次的 requestId 值,打断点确认上一次执行请求结束对 ttlContext 进行了清空,但是打断点发现第二次请求一进入拦截器 ttlContext 就已经有上次的值,求大佬解惑
    2 条回复    2023-09-27 18:10:36 +08:00
    SilenceLL
        1
    SilenceLL  
       2023-09-27 13:55:19 +08:00
    看下有没有传给子线程或者线程池使用,也要清除一下。
    tianwaifeixian
        2
    tianwaifeixian  
    OP
       2023-09-27 18:10:36 +08:00
    @SilenceLL 谢谢,找到问题了,是因为重写了 ThreadLocal init 方法,传了一个 hashMap 进去,调用 ThreadLocal 的 remove 方法只清除了引用,map 没有清空
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2634 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:31 · PVG 23:31 · LAX 07:31 · JFK 10:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.