Finagle Отправить запрос на случайный сервер в кластере
Я использую finagle
как rest
клиент. В ClientBuilder
Я указываю диапазон хостов, но запрос требует установки URL с хостом. Как я могу избежать указания хоста в запросе и позволить 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 ответ
Решение
Похоже, вы используете 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)