使用 NewRelic 中的 ExecutorService 对 Runnable 对象进行事务跟踪和分布式跟踪

问题描述

我有一个 Springboot 应用程序。我有一个看起来像这样的方法

//...
ExecutorService executorService = Executors.newFixedThreadPool(5);
//...
public void processData(){
    //some processing
    final Token token = NewRelic.getAgent().getTransaction().getToken();
    final distributedTracePayload payload = NewRelic.getAgent().getTransaction().createdistributedTracePayload();
    Runnable task = () -> {
        NewRelic.getAgent().getTransaction().acceptdistributedTracePayload(payload);
        token.link();
        //some HTTP calls to other services
        NewRelic.addCustomParameter("key",value);
    }
    executorService.submit(task);
    token.expire();
}

当我运行应用程序并检查 New Relic UI 时,分布式跟踪部分没有显示对其他服务的调用,我没有看到可运行对象中的步骤或跟踪中的自定义属性。我做错了什么,我该如何解决

我也尝试将 https 调用移动到这样的单独方法

//...
ExecutorService executorService = Executors.newFixedThreadPool(5);
//...
public void processData(){
    //some processing
    final Token token = NewRelic.getAgent().getTransaction().getToken();
    final distributedTracePayload payload = NewRelic.getAgent().getTransaction().createdistributedTracePayload();
    Runnable task = () -> makeHttpCalls(payload,token);
    executorService.submit(task);
}

@Trace
public void makeHttpCalls(distributedTracePayload payload,Token token){
    NewRelic.getAgent().getTransaction().acceptdistributedTracePayload(payload);
    token.linkAndExpire();
    // make HTTP calls
}

我仍然面临同样的问题

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)