Каков наилучший способ передачи общего идентификатора запроса по цепочке фильтров / служб для входа в Finagle / Scala? - PullRequest
0 голосов
/ 12 октября 2019

Мы используем много 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 с помощью черт / патчей? Или это не выполнимо?

1 Ответ

0 голосов
/ 12 октября 2019

Это может быть сделано с помощью Контекстов Finagle .

Контексты предоставляют вам доступ к состоянию области запроса, такому как крайний срок запроса, в течение всей логической жизни запроса безтребуя, чтобы они были явно переданы

...