有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Spring Sleuth中以反应式调用链命名Span

我让Spring Cloud Sleuth(2.0.2.RELEASE)在一些基于web的请求/响应系统中的(部分)反应类中工作。代码是这样的:

private static final Scheduler PROCESSING_SCHEDULER = Schedulers.newParallel("processingScheduler");

public Set<ProcessedItem> processItems(List<Item> incomingItems) {
    return Flux.fromIterable(incomingItems)
        .publishOn(PROCESSING_SCHEDULER)
        .collectMultimap(Item::getRequestIdentifier)
        .flatMapIterable(Map::values)
        .flatMap(itemProcessor::processGroupedItems)
        .collect(Collectors.toSet())
        .block();
}

由于总是有很多响应出现,因此对于一个请求,这个方法会被调用数百次。 我怀疑这个用.publishOn的调用会导致Zipkin中成百上千个async跨度(见附件屏幕截图)。至少我假设跨度是从那来的,因为这是我从the documentation中理解的

所以我的第一个问题是: 我如何为这种异步线程关联一个名称?我没有地方放在这里

作为跟进,有没有办法不收集这些跨度?我不需要它们,它们填满了我们的Zipkin存储空间,但我也不想禁用一般的反应式或侦探,因为它在其他地方是需要的

Screenshot from Zipkin


共 (1) 个答案

  1. # 1 楼答案

    您可以创建自己的自定义SpanAdjuster来修改跨度名称。您还可以使用FinishedSpanHandler对完成的跨距进行操作,以调整跨距