1

我正在尝试在我的 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)
}

我怀疑我的主机参数是错误的?但是我想在里面放什么,这是对外部 REST 服务的调用?

4

2 回答 2

3

的字符串参数hosts不是 URI,而是应该具有形式"host:port"(或"host1:port1,host2:port"一组主机),因此将该行更改为.hosts("service.site-dev.com:80")应该可以解决问题。

我有点惊讶你没有看到NumberFormatException——你使用的是什么版本的 Finagle?

于 2014-11-01T15:36:07.900 回答
0

你可能想检查这个 https://github.com/opower/finagle-resteasy

这是一个基于 Finagle 的替代 Resteasy 的客户端执行器。

于 2014-12-07T21:54:12.143 回答