В чем разница между @Client, внедренным в Groovy Micronaut, и RxHttpClient против RxHttpClient.create? - PullRequest
0 голосов
/ 22 сентября 2018

Я создаю HTTP-клиент Micronaut, используя аннотацию @Client в Groovy, и компилятор жалуется, если я использую что-либо кроме статической константы.Однако это ограничивает меня от возможности изменять URL-адрес для каждой среды, передавая значение конфигурации.

Поэтому я попытался использовать вместо этого RxHttpClient.create(myUrl) в своем сервисе, и тот же запрос, который я делаю, возвращает 403. Документы RxHttpClient говорят

Создайте новый HttpClient.Обратите внимание, что этот метод должен использоваться только вне контекста приложения.В Micronaut используйте Inject, чтобы вместо этого внедрить клиента.

Это не объясняет , почему Я не должен использовать метод create, и у меня осталсяневозможность делать запросы к разным серверам в разных средах.В чем разница между двумя клиентами, которых я создаю?

1 Ответ

0 голосов
/ 24 сентября 2018

В аннотации @Client будет введен управляемый клиент, которому была добавлена ​​зависимость, с дополнительными инструментальными функциями для трассировки, распространения и т. Д. При использовании create Micronaut не может внедрить экземпляр зависимости, поэтому определенные функции платформы не будут работать.

В дополнение к create вы должны убедиться, что вы вручную close клиенте, так как Micronaut не может управлять жизненным циклом, и корректно завершать работу клиента при завершении работы приложения.

Наконец, в отношении использованиястатическая константа @Client, это не так, что это ограничивает вас, так как значение может включать заполнители.Например:

@Client("${my.server}")

Затем в application.yml вы можете настроить:

my:
  server: http://foo.com

Или даже лучше, вы можете использовать новую функцию HTTP-сервисов.См https://docs.micronaut.io/latest/guide/index.html#serviceDiscoveryManual

...