Finagle向集群内的随机服务器发送请求

时间:2015-08-20 15:46:07

标签: finagle twitter-finagle

我使用finagle作为rest客户端。在ClientBuilder中我指定了一系列主机,但请求需要设置一个包含主机的网址。 如何避免在请求中指定主机并让finagle选择一个? 感谢。

    val client = ClientBuilder().hosts("host1:81,host2:82").codec(Http()).build()

    val request = RequestBuilder()
        // .url("http://host1/get") // dont want to specify host
        // .url("/get") // MalformedURLException: no protocol
        .buildGet()

    var resp = client(request) // sent to host specified by url

1 个答案:

答案 0 :(得分:2)

看起来你正在使用finagle-http模块。使用RequestBuilder无法在URL中构建没有主机的请求。不过,您可以手动构建Request(或创建自己的RequestBuilder以供进一步使用)

我建议切换到finagle-httpx模块(https://github.com/twitter/finagle/tree/develop/finagle-httpx)。它与finagle-http不兼容,但它有很多API改进,并且能够在URL中创建没有主机的请求,例如:

val client = Httpx.client.withTls("my.api")
  .newService("host1.my.api:443,host2.my.api:443")

val req = Request("/get")

val rep = client(req)