Мы используем много Finagle Filter
с и Service
с в нашем коде. Однако мы не поддерживаем Zipkin в нашей инфраструктуре. Временами возникает необходимость отслеживать входящий запрос по цепочке Фильтров / Сервисов, особенно в условиях одновременных запросов. Какой самый ненавязчивый способ получить такую функциональность?
Цель: Было бы замечательно, если бы сам Finagle предоставил дополнительный метод apply
, например, так:
def apply(request: ReqIn, service: Service[ReqOut, RepIn], traceId: String): Future[RepOut]
Тогда подклассы могут отказаться от использования этого метода. Последним аргументом является идентификатор, к которому каждый «Фильтр / Сервис» в цепочке может «добавляться».
override def apply(request, service, traceId): Future[...] = {
val myTrace = traceId+".me2" // can be logged if needed
service.apply(..., myTrace)
}
Пример:
val chain = FilterA andThen FilterB andThen ServiceP
val response = chain(request, UUID.randomString) // need a way to "seed the request chain with unique string"
Цель состоит в том, чтобы иметь что-то, что может эффективно отслеживать / регистрировать серию фильтров / сервисов. Как я могу продвинуть Finagle с помощью черт / патчей? Или это не выполнимо?