新文物(java) - 跟踪注释不跟踪内部方法

时间:2018-03-07 17:47:30

标签: spring newrelic newrelic-platform

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

我在方法A中使用@Trace注释。我还希望在每个方法中不使用@Trace(dispatcher = true)来跟踪方法B和C.有可能吗?

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

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

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

1 个答案:

答案 0 :(得分:2)

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

解决方案是使用New Relic的 Java agent API for asynchronous applications 。您可以从为methodA()创建的交易中获取令牌,然后在methodB()methodC()链接该令牌。

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

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