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)
我正在使用 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)