Как назвать Span в Spring Sleuth в цепочке реактивных вызовов

У меня есть 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


person Dominik Sandjaja    schedule 05.11.2018    source источник


Ответы (1)


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

person Marcin Grzejszczak    schedule 07.11.2018
comment
Спасибо, я видел SpanAdjuster, но не нашел FinishedSpanHandler. Я дам ему попробовать! - person Dominik Sandjaja; 07.11.2018