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

Finagle Send request to random server within cluster

我正在使用 finagle 作为 rest 客户端。在 ClientBuilder 中我指定了主机范围,但是请求需要设置一个 url with 主机。 如何避免在请求中指定主机并让 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

您似乎在使用 finagle-http 模块。在 URL 中使用 RequestBuilder 无法在没有主机的情况下构建请求。不过,您可以手动构建 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)