标签: twitter-finagle

是否有一种简单的方法可以在SBT中指定全局依赖项排除

您如何在全球范围内排除传递依赖?我的项目取决于许多Twitter库或依赖于Twitter库的库.我不想slf4j-jdk14在我的类路径中,无论如何(我使用logback作为slf4j绑定).

目前我这样做:

"com.twitter" %% "finagle-thriftmux" % "6.16.0" exclude("org.slf4j", "slf4j-jdk14")
Run Code Online (Sandbox Code Playgroud)

但每当有人添加另一个使用的依赖项时,slf4j-jdk14我可能会将其恢复到类路径中.

scala slf4j sbt finagle twitter-finagle

23
推荐指数
3
解决办法
1万
查看次数

Finagle和Akka,为什么不一起使用它们?

我在练习中没有使用过Finagle和Akka,但我一直在阅读很多关于它们的内容.

Finagle是一个RPC系统而Akka是高度并发应用程序的工具包,为什么所有人都将它们作为两个可能无法一起使用的可能解决方案进行比较?我所做的所有搜索建议使用其中一个,没有人建议一起使用它们.

例如,Finagle有一种通过thrift和IDL定义端点的非常有趣的方法.使用此IDL,我们可以定义自定义端点,并通过scooge或任何代码生成工具,可以毫不费力地使用服务.此外,还会创建连接到此服务的客户端,并自动解决许多常见的客户端问题(重新连接,超时,重试,负载平衡,连接池,...).

相反,Akka解决了许多并发问题,并且在没有手动控制线程的所有复杂性的情况下,它可以非常好地扩展.

总结一下,为什么不一起使用它们?:

  • Finagle + Thrift(及其IDL):它有助于服务设计和开发以及部署(包括易于扩展).
  • Akka:它通过其Actor系统使用所有服务器功能,如果我更改服务器属性,它会非常好地扩展(例如,如果它部署在EC2上,我将我的节点从m1.small转换为m1.large).

你怎么看?

注意:假设映射Futures和Promises的问题已得到解决,以及FuturePools和ExecutionContexts之间的不匹配.模式是将Finagle转换为使用Futures的scala方式.

scala akka finagle twitter-finagle

18
推荐指数
1
解决办法
5899
查看次数

Twitter未来优于Scala Future的优势是什么?

我知道Scala Future更好的原因很多.是否有任何理由使用Twitter Future?除了Finagle使用它之外.

twitter scala finagle twitter-finagle twitter-util

15
推荐指数
1
解决办法
4148
查看次数

如何在Finatra中处理put请求?

我有一个具有put端点的服务.我希望能够访问url param以及body.我如何实现这一目标.

这是我的终点:

put("/:customerNum") { foo: Foo =>
    val custNum = ???
  }
Run Code Online (Sandbox Code Playgroud)

我如何访问customerNum?

scala finagle twitter-finagle finatra

5
推荐指数
1
解决办法
155
查看次数

Finagle快速启动客户端

我有一个简单的sbt项目,我已添加"com.twitter" %% "finagle-http" % "6.33.0".我正在关注Twitter Finagle 的快速入门指南.我的代码是直接复制粘贴:

import com.twitter.finagle.{Http, Service}
import com.twitter.finagle.http
import com.twitter.util.{Await, Future}

object Client extends App {
  val client: Service[http.Request, http.Response] = Http.newService("www.scala-lang.org:80")
  val request = http.Request(http.Method.Get, "/")
  request.host = "www.scala-lang.org"
  val response: Future[http.Response] = client(request)
  response.onSuccess { resp: http.Response =>
    println("GET success: " + resp) 
    println(resp.contentString)    // modification 1
  }
  Await.ready(response)
  println("needed this")           // modification 2
}
Run Code Online (Sandbox Code Playgroud)

没有" modification 2"我根本没有输出.随着这一点println,我得到了

needed this
GET success: Response("HTTP/1.1 Status(200)")

Process finished with …
Run Code Online (Sandbox Code Playgroud)

scala http finagle twitter-finagle

3
推荐指数
1
解决办法
607
查看次数

在Finagle中记录远程主机

我想在使用Finagle Client时将被叫远程主机记录到STDOUT.但据我所知,这是不可能的com.twitter.finagle.http.filter.LoggingFilter; 其#format(示例见下文)方法无法访问实际主机:

  • request.remoteHost() 回报 0.0.0.0
  • request.remoteAddress() 返回一个基本上包含上述IP的对象
  • request.host()返回一个None对象

我的第一个猜测是,访问主机是不可能的,因为Finagle的客户端负载平衡在堆栈中发生得更深.

这是我使用的测试代码:

    LoggingFilter<Request> loggingFilter = new LoggingFilter<>(
            new Logger(this.getClass().getSimpleName(), java.util.logging.Logger.getLogger(this.getClass().getSimpleName())),

            new LogFormatter<Request, Response>() {
                @Override
                public String format(Request request, Response reply, Duration replyTime) {
                    return null;
                }

                @Override
                public String formatException(Request request, Throwable throwable, Duration replyTime) {
                    return null;
                }
            });

    Service<Request, Response> service = Http.client().newService("localhost:8090,localhost:8091");
    Future<Response> response = loggingFilter.andThen(service).apply(Request.apply("/profiles/me"));
Run Code Online (Sandbox Code Playgroud)

finagle twitter-finagle

3
推荐指数
1
解决办法
418
查看次数

刷新twitter finagle库中的DNS缓存

twitter finagle库是否自行进行DNS缓存?我问这个是因为我们删除了vip背后的一些主机,但他们仍然收到了我们客户的请求.

如果有这样的缓存,我该如何为它设置超时?

scala finagle twitter-finagle

2
推荐指数
1
解决办法
1180
查看次数

期权期货的Finagle过滤序列

我正在使用twitter finagle框架并给出一系列期望的期权我想根据期权的状态过滤它们.

seqFuture : Seq[Future[Option[Foo]]] 
val filteredFuture = seqFuture map { fut => fut map {
      opt => if(opt.isDefined) bar(opt.get)
   }
}
Run Code Online (Sandbox Code Playgroud)

该功能bar : Foo => Bar可以是身份,但我不想返回Option[Bar].如果未定义该选项,我希望未来能够无声地失败,并且只对包含已定义选项的期货进行进一步处理.

我尝试过组合flatten, flatMap, match case Some(_) =>,但我没有过滤它们.如果我抛出Exception未定义选项的地方,所有期货处理都将失败(因为我在某些时候收集它们)

我在finagle指南中找不到任何解决这个问题的方法

使用finagle框架过滤和链接未来的替代解决方案仍然是值得赞赏的.

scala finagle twitter-finagle

1
推荐指数
1
解决办法
46
查看次数

标签 统计

finagle ×8

twitter-finagle ×8

scala ×7

akka ×1

finatra ×1

http ×1

sbt ×1

slf4j ×1

twitter ×1

twitter-util ×1