как pinpoint передает AsyncContext, моя трассировка не работает? - PullRequest
0 голосов
/ 07 мая 2020

Я использую новую версию pinpoint (из github мастера), у нее есть поддержка AsyncContext, но я использую несколько случаев в методе, но плагины не работают (я использую плагин реактора для тестирования). мой код, как показано ниже:

@Override
public String sayHello(String name) {
    LOGGER.info("[sayHello]start: {}", name);
    //执行一个 complete 1 任务

    //testFuture();
    redisUtil.set(name, name + new Date());
    //reactor
    Flux.range(1, 2).map(i -> 10 / (3 - i)).retry(1).subscribe(System.out::println, System.err::println);
    Flux.generate(sink -> {
        sink.next("Hello");
        sink.complete();
    }).subscribe(System.out::println);
    Flux.create((t) -> {
        t.next("create");
        t.next("create1");
        t.complete();
    }).subscribe(System.out::println);
    return "Hello " + name + " " + new Date();
}

, когда я отлаживаю код точного агента, я обнаружил AsyncContextSpanEventSimpleAroundInterceptor #, прежде чем будет getAsyncContext, результат всегда будет нулевым, поэтому трассировка каждый раз прерывается.

//from AsyncContextSpanEventSimpleAroundInterceptor#before
@Override
public void before(Object target, Object[] args) {
    if (isDebug) {
        logger.beforeInterceptor(target, args);
    }
   //here ,the get context operation returns null,!!!!
    final AsyncContext asyncContext = getAsyncContext(target);
    if (asyncContext == null) {
        logger.debug("AsyncContext not found");
        return;
    }
    .......
}

может кто подскажет почему?

...