Как назвать Span в Spring Sleuth в цепочке реактивных вызовов - PullRequest
0 голосов
/ 05 ноября 2018

У меня Spring Cloud Sleuth (2.0.2.RELEASE) работает в (частично) реактивном классе в некоторой веб-системе запросов / ответов. Код выглядит примерно так:

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 приводит к сотням и тысячам async промежутков в Zipkin (см. Прикрепленный скриншот). По крайней мере, я предполагаю, что промежутки от этого, потому что это то, что я понимаю из документации

Итак, мой первый вопрос: Как я могу связать имя для таких асинхронных потоков? У меня нет места, чтобы поместить @SpanName здесь.

Как продолжение, есть ли способ НЕ собрать эти промежутки? Они мне не нужны, они заполняют наше хранилище Zipkin, но я также не хочу отключать реактив или Sleuth вообще, так как это нужно в других местах ...

Скриншот из Zipkin

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете создать свой собственный SpanAdjuster, который будет изменять имя диапазона. Вы также можете использовать FinishedSpanHandler для работы с готовыми пролетами, чтобы настроить их.

...