如何在反应式调用链中命名 Spring Sleuth 中的 Span
How to name Span in Spring Sleuth in a reactive calling chaining
我有 Spring Cloud Sleuth (2.0.2.RELEASE) 在某些基于网络的 request/response 系统中的(部分)反应式 class 中工作。代码是这样的:
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
中了解到的
所以我的第一个问题是:
如何为此类异步线程关联名称?我没有地方放 @SpanName
这里。
作为后续行动,有没有办法不收集这些跨度?我不需要它们,它们会填满我们的 Zipkin 存储空间,但我也不想禁用 reactive 或 Sleuth,因为在其他地方需要它...
Screenshot from Zipkin
您可以创建自己的自定义 SpanAdjuster
来修改跨度名称。您还可以使用 FinishedSpanHandler
对完成的跨度进行操作以调整它们。
我有 Spring Cloud Sleuth (2.0.2.RELEASE) 在某些基于网络的 request/response 系统中的(部分)反应式 class 中工作。代码是这样的:
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
所以我的第一个问题是:
如何为此类异步线程关联名称?我没有地方放 @SpanName
这里。
作为后续行动,有没有办法不收集这些跨度?我不需要它们,它们会填满我们的 Zipkin 存储空间,但我也不想禁用 reactive 或 Sleuth,因为在其他地方需要它...
Screenshot from Zipkin
您可以创建自己的自定义 SpanAdjuster
来修改跨度名称。您还可以使用 FinishedSpanHandler
对完成的跨度进行操作以调整它们。