Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【用户反馈收集】说一下您的使用场景、使用项目、公司,感谢! #73

Closed
oldratlee opened this issue May 10, 2017 · 7 comments
Labels

Comments

@oldratlee
Copy link
Member

oldratlee commented May 10, 2017

说一下您的公司、使用场景、使用项目、开始使用时间、使用方式等信息
# 如有敏感的信息,说个大概就好了

  1. 方便大家了解项目实际使用的情况
  2. 方便给大家反馈和支持

谢谢!

@oldratlee oldratlee changed the title 您的使用场景、使用项目、公司使用反馈收集,感谢! 【用户反馈收集】说一下您的使用场景、使用项目、公司,感谢! May 10, 2017
@oldratlee oldratlee added the task label May 10, 2017
@wuwen5
Copy link
Collaborator

wuwen5 commented May 11, 2017

公司 欧飞网
项目 所有Java项目
使用场景 logback日志uuid跟踪,支持跨线程池的uuid传递
开始使用时间 2015年
使用方式 logback-mdc-ttl

dubbo接口通过filterRpcContext中传递,http接口在请求头中统一传递和接收。

@yinjihuan
Copy link

我想问下能不能只改造InheritableThreadLocal就能解决这个传值的问题,我现在在Spring Cloud Zuul中使用的是InheritableThreadLocal。然后就发现线程复用的时候会出问题,如果按照目前的实现方式,我估计要对zuul中的线程进行处理,这样太麻烦了

@wuwen5
Copy link
Collaborator

wuwen5 commented Mar 23, 2018

@yinjihuan 你看下本项目首页介绍

使用类TransmittableThreadLocal来保存值,并跨线程池传递。
TransmittableThreadLocal继承InheritableThreadLocal,使用方式也类似。

你的应用场景只需要将InheritableThreadLocal替换为TransmittableThreadLocal就好了,详细请见User Guide

@alibaba alibaba deleted a comment from Qsimple Mar 30, 2018
@jinwandalaohu
Copy link

公司
使用场景日志中心分类logId

@xwshiustc
Copy link
Collaborator

xwshiustc commented Jul 19, 2018

公司   国内某物流公司(公司会查不好写名字)
项目 生产环境全链路压测项目
使用场景 线程中压测标的传递
开始使用时间 2017年

在生产环境全链路压测项目中,用于解决压测标的线程间传递问题。

理论上TransmittableThreadLocal 的原理为在线程启动时利用Map<Transmittable, Object>的数据结构从上一个“父”线程copy引用进入”子”线程进行工作,并在“子”线程结束工作使把其TransmittableThreadLocal里面的值还原为初始状态。(一般在使用线程池,并且使用完毕后如果threadlocal不去显式得remove时还原功能有作用),同时我们注意到 TransmittableThreadLocal 复制的是 引用 ! 但是根据性能压测的场景判断,即父线程在一旦结束时,其压测标记需要显式remove的情况下,子线程的压测标记不可被改变,所以压测场景中,技术上可能是要进行复制。 为此我们在不覆盖TransmittableThreadLocal的任何方法的情况下,在TransmittableThreadLocal直接放入一个简单的 string天生只能值传递 解决该问题。(另外,在APM工具中 因为span id的递增,这时候需要放入一个对象进行引用传递)

在用户不覆盖java.util.concurrent.ThreadPoolExecutor,java.util.concurrent.ScheduledThreadPoolExecutor 等基本类的情况下(事实上业务代码几乎不覆盖这些类)可以用于压测标记的传递,目前仅发现了容器类org.jboss.threads.JBossThread没有覆盖该方法,但是由于其是从容器出发的第一个线程,在调用结束的时候我们会显式地remove TransmittableThreadLocal里面的值,所以没有影响。

在“子”线程结束工作使把其TransmittableThreadLocal里面的值还原为初始状态 这个功能我并不理解在现实中的使用场景? 能不能解释一下为何要如此设计而不是直接清空,因为我们目前的场景的话,其是还原为之前的状态就是清空,只有当threadlocal在线程池中使用完毕后不remove,下次父线程再通过executeService开启子线程使用时,该功能会起作用,但是本人在开发过程中从来没有遇到过该场景

@Ronustine
Copy link

项目 验收系统
时间 2018-9
使用场景 当前登录者存在ThreadLocal中,启动线程池执行任务,任务中一系列操作需记录操作人

@linxiaobai
Copy link

linxiaobai commented Jul 9, 2021

公司 国内某互联网金融公司
项目 某BU中间件链路透传Tracer
使用场景 使用ttl的跨线程透传上下文信息的能力来简化跨线程传递上下文的步骤
开始使用时间 2021年
使用方式 见下面代码,wrap一层ExecutorService
 public static ExecutorService createTracerExecutorService(ExecutorService executorService) {
        return TtlExecutors.getTtlExecutorService(executorService);
    }

@oldratlee oldratlee unpinned this issue Jan 6, 2022
@oldratlee oldratlee pinned this issue Jan 6, 2022
@oldratlee oldratlee unpinned this issue Jan 6, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

7 participants