0

我有这种情况。方法 A 是异步的,它使用方法 B 和 C,它们也是异步的。Spring 使用 @Async 注释来声明该方法必须在新线程中运行。

我在方法 A 中使用了 @Trace 注释。我还想跟踪方法 B 和 C,而不在每个方法上使用 @Trace(dispatcher = true)。可能吗?

跟踪注释有很多标志,但我无法使其工作。

@Trace(dispatcher = true)
@Async
public void methodA(){
     methodB();
     methodC();
}

@Async
public void methodB(){ //I don't want another @Trace annotation here
     //some code
}
4

1 回答 1

2

正如您无疑已经注意到的那样,使用(dispatcher = true)无处不在会导致创建许多小的、断开连接的事务。在 New Relic UI 中,结果可能难以理解。

解决方案是将 New Relic 的Java 代理 API 用于异步应用程序。您可以从为创建的事务中获取令牌methodA(),然后将令牌链接methodB()到和中methodC()

使用后使令牌过期很重要,因此您需要开发一个特定于应用程序的方案来获取令牌,将其传递给将链接它的每个异步执行,然后将其过期。

免责声明:我是 Java 代理团队的前成员。我不再在 New Relic 工作。我的意见是我自己的,不代表我现在的雇主或任何其他人。

于 2018-03-08T02:03:21.163 回答