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)
Другие вопросы по тегам