1

我像这样使用 Finagle 创建一个节俭服务器

val server = Thrift.serveIface(bindAddr(), new MyService[Future] {
  def myRPCFuction() {}
})

但是,我发现并发请求的最大数量是 5(为什么是 5?当超过 5 时,服务器会忽略超出的请求。)我真的很难通过 Finagle 的文档(http://twitter.github.io /finagle/guide/Protocols.html#thrift-and-scrooge),但找不到配置最大请求限制的提示。如何配置 Finagle 的最大并发请求数?谢谢

4

1 回答 1

2

我自己解决了这个问题,我在这里分享它以帮助可能遇到相同情况的其他人。因为我在 Thrift 之前和在 Thrift 中使用 thrift 用户,所以当您从 RPC 函数返回时,您会将值返回给调用客户端。在 Finagle 中,仅当您使用时才Future.value()将值返回给客户端。而在使用Finagle的时候,应该完全使用异步的方式,也就是说最好不要在RPC函数中sleep或者做一些其他的同步RPC。

/*   THIS is  BAD */
val server = Thrift.serveIface(bindAddr(), new MyService[Future] {
  def myRPCFuction() {
      val rpcFuture = rpcClient.callOtherRpc() // call other rpc which return a future
      val result = Await.result(rpcFuture, TwitterDuration(rpcTimeoutSec()*1000, MILLISECONDS))
      Future.value(result)
  }
})
/* This is  GOOD */
val server = Thrift.serveIface(bindAddr(), new MyService[Future] {
  def myRPCFuction() {
      val rpcFuture = rpcClient.callOtherRpc() // call other rpc which return a future
      rpcFuture onSuccess { // do you job when success (you can return to client using Future.value) }
      rpcFuture onFailure { // do your job when fail   }
  }
})

那么,就可以得到满意的并发了。希望它可以帮助其他有同样问题的人。

于 2015-01-13T09:57:38.827 回答