【问题标题】:Can I apply filters server-side for finagle-thrift?我可以在服务器端为 finagle-thrift 应用过滤器吗?
【发布时间】:2015-12-10 20:29:40
【问题描述】:

我正在尝试编写一个在服务器中应用过滤器的 finagle-thrift 服务。

finagle-thrift 从您实现的 thrift IDL 生成一个服务接口 (Iface),然后传递给 Thrift.serveIface(addr, Iface) 方法。还有另一种方法Thrift.serve(addr, Service[Req, Rep]) 可用于提供更通用的服务。可以组合服务,所以我想做Thrift.service(addr, myFilter andThen myService)之类的事情,但我不知道如何将Iface转换为服务。

Thrift.serveIface 方法使用私有方法 serverFromIface,它执行 Iface 到服务的转换,这将允许我在将服务传递给 Thrift.serve 之前使用过滤器组合服务。见:https://github.com/twitter/finagle/blob/master/finagle-thrift/src/main/scala/com/twitter/finagle/rich.scala

由于该转换是私有的,我不知道应该如何在服务器中应用过滤器。

【问题讨论】:

    标签: scala finagle


    【解决方案1】:

    我发现了一种直接构建服务的方法。代码生成器使用服务名称+“$FinagleService”创建一个类。这可以通过对 Iface 实现和 TProtocolFactory 的引用来构造,以生成可与过滤器组合的 Service 对象,并且可以由 Thrift 对象提供服务。

    这是一个名为“Hello”的服务示例:

    val service = new Hello$FinagleService(
      iface = new Hello[Future]() {...},
      protocolFactory = Protocols.binaryFactory()
    )
    val compositeService = myFilter andThen service
    Thrift.serve(addr, compositeService)
    

    【讨论】:

      猜你喜欢
      • 2016-03-06
      • 2016-09-22
      • 2011-09-28
      • 2010-10-17
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      相关资源
      最近更新 更多