Twitter Finagle客户端:如何进行外部REST api调用?

时间:2014-10-31 03:47:48

标签: scala rest finagle twitter-finagle

我试图在我的finagle代码中创建一个外部(到finagle服务器)REST GET请求,其URI为:http://service.site-dev.com/subservices/list

我使用的示例中的客户端代码位于:https://twitter.github.io/scala_school/finagle.html#client

我的代码(用Scala编写)看起来如下所示,但即使我设置了超时限制,它也会挂起:

val client: Service[HttpRequest, HttpResponse] = ClientBuilder()
  .codec(Http())
  .hosts("http://service.site-dev.com") // If >1 host, client does simple load-balancing
  .hostConnectionLimit(1)
  .tcpConnectTimeout(1.second)
  .requestTimeout(20.seconds)
  .retries(2)
  .build()

val req = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "http://service.site-dev.com/subservices/list")

val f = client(req) // Client, send the request

// Handle the response:
f onSuccess { res =>
  println("got response", res)
} onFailure { exc =>
  println("failed :-(", exc)
}

我怀疑我的主持人param是错的?但我想在那里放一个是对外部REST服务的调用吗?

2 个答案:

答案 0 :(得分:3)

hosts的字符串参数不是URI,而是应该具有"host:port"(或"host1:port1,host2:port"形式的一组主机),因此将该行更改为{{ 1}}应该解决问题。

我有点惊讶你没有看到.hosts("service.site-dev.com:80") - 你使用的是什么版本的Finagle?

答案 1 :(得分:0)

您可能想要检查一下 https://github.com/opower/finagle-resteasy

它可以替代Resteasy的客户执行者,而不是基于Finagle的替代品。