什么';在登录Finagle/Scala时,通过过滤器/服务链传递公共请求标识符的最佳方法是什么?

什么';在登录Finagle/Scala时,通过过滤器/服务链传递公共请求标识符的最佳方法是什么?,scala,finagle,Scala,Finagle,我们在代码中使用了大量欺骗过滤器s和服务s。但是,我们的基础设施不支持Zipkin。有时需要跨过滤器/服务链跟踪传入请求,尤其是在并发请求的情况下。获得这种功能最非侵入性的方式是什么 目标: 如果Finagle本身提供了一个附加的apply方法,那就太好了,如下所示: def apply(request: ReqIn, service: Service[ReqOut, RepIn], traceId: String): Future[RepOut] 然后子类可以选择使用这个方法。最后一个参数是

我们在代码中使用了大量欺骗
过滤器
s和
服务
s。但是,我们的基础设施不支持Zipkin。有时需要跨过滤器/服务链跟踪传入请求,尤其是在并发请求的情况下。获得这种功能最非侵入性的方式是什么

目标: 如果Finagle本身提供了一个附加的
apply
方法,那就太好了,如下所示:

def apply(request: ReqIn, service: Service[ReqOut, RepIn], traceId: String): Future[RepOut]
然后子类可以选择使用这个方法。最后一个参数是链中的每个筛选器/服务可以“附加到”的标识符

例如:

val chain = FilterA andThen FilterB andThen ServiceP

val response = chain(request, UUID.randomString) // need a way to "seed the request chain with unique string"

我们的目标是拥有能够唯一有效地跟踪/记录一系列过滤器/服务的东西。我如何通过特征/猴子补丁来扩展欺骗?或者这是不可行的?

这可以用欺骗的方法来完成

上下文允许您在请求的整个逻辑生命周期内访问请求范围内的状态,例如请求的截止日期,而无需显式传递它们


我尝试过使用它,但我不确定我是否理解链接中的用法。你有其他/不同的例子吗?
val chain = FilterA andThen FilterB andThen ServiceP

val response = chain(request, UUID.randomString) // need a way to "seed the request chain with unique string"