我有这种情况。方法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
}
答案 0 :(得分:2)
正如您毫无疑问地注意到的那样,在任何地方使用(dispatcher = true)
会导致创建许多小的,断开连接的事务。在New Relic UI中可能难以理解结果。
解决方案是使用New Relic的 Java agent API for asynchronous applications 。您可以从为methodA()
创建的交易中获取令牌,然后在methodB()
和methodC()
中链接该令牌。
使用后到期令牌很重要,因此您需要开发一个特定于应用程序的方案来获取令牌,将其传递给将链接它的每个异步执行,以及然后过期。
免责声明:我是Java Agent团队的前成员。我不再在New Relic工作了。我的意见是我自己的,不代表我现在的雇主或其他任何人。