【发布时间】:2020-10-12 17:38:23
【问题描述】:
我正在尝试使用 newrelic 正确跟踪 spark-kotlin 服务器中的事务。这个特定的服务器使用大量协程,因为它向其他服务器发出大量请求。
Newrelic 具有自定义工具,允许从事务发起的线程跟踪其他线程中正在完成的工作。这方面的关键工具是:
- 令牌
- 使用“async = true”进行跟踪
所以要跟踪另一个线程上的工作,我们必须:
- 在原帖中颁发Token
- 在“工作线程”中链接令牌
- 当没有更多线程与事务关联时使令牌过期 (见doc)
我们也知道,一个协程可以跨多个线程执行,因此为了正确跟踪一个协程中完成的工作,我们必须链接每个线程。为此,我认为可以使用延续拦截器,如this question 中所述。当我们想要使令牌过期时,就会出现问题。假设我们在调用协程构建器之前发出一个令牌并将其设置在协程上下文中。然后我们可以在延续拦截器中链接令牌,但是我怎么知道协程何时完成以使令牌过期?我尝试使用“ContinuationInterceptor::releaseInterceptedContinuation()”,但事实证明它可能在单个协程中被调用多次,因为它是在每个延续被释放后调用的。
【问题讨论】:
标签: multithreading kotlin kotlin-coroutines newrelic