【问题标题】:finagle filter add default behaviorfinagle 过滤器添加默认行为
【发布时间】:2015-07-09 12:46:25
【问题描述】:

关于过滤器的问题:https://twitter.github.io/scala_school/finagle.html#Filter

对于典型的过滤器堆栈 + 服务布局,如何为每个过滤器添加默认行为?它基本上查看请求/响应并执行一些副作用操作(计数、日志记录等)。我不想为每个过滤器编写代码,而是希望在每个过滤器结束时触发此默认行为。

【问题讨论】:

    标签: scala finagle twitter-finagle


    【解决方案1】:

    您想要的是过滤器组合,即您创建一个过滤器,它实际上只是一个传递并导致一些副作用,然后您可以通过组合将它与任何其他过滤器混合。例如:

    val authFilter: Filter[HttpReq, HttpRep, AuthHttpReq, HttpRep]
    val loggingFilter[Req, Rep]: Filter[Req, Rep, Req, Rep]
    
    val authWithLogging: Filter[HttpReq, HttpRep, AuthHttpReq, HttpRep] =
      authFilter andThen loggingFilter
    

    【讨论】:

    • 这可以工作,但是会很奇怪,假设我有:FilterA 然后是 FilterB 然后是 FilterC 使用这种方法我将这样做:FilterA 然后是 LoggingFilter 然后是 FilterB 然后是 LoggingFilter 然后是 FilterC
    • 正确。这就是为什么 LoggingFilter 应该组成而不是说,是一个通用的过滤器基类。理想情况下,您应该为您需要的服务组合过滤器,而不是组合以前组合的过滤器
    猜你喜欢
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2012-05-03
    相关资源
    最近更新 更多