Мне нужно вызвать несколько разных API из моего приложения с помощью WebClient. Допустим, есть два разных API. Для этих API я должен использовать разные SSLContexts, созданные из разных сертификатов. Я создаю для них разные SSLContexts (используя разные сертификаты).
В качестве бэкэнда для WebClient я использую стандартный подход — ReactorClientHttpConnector
с Reactor Netty Http client
Там можно настроить SSL следующим образом:
new ReactorClientHttpConnector(HttpClient.create()
.secure(sslContextSpec -> sslContextSpec.sslContext(sslContext))
);
Но я не уверен, как настроить несколько разных SSLContext (для каждого API).
Теперь я вижу три способа сделать это:
Создайте два разных ReactorClientHttpConnector
с разными HttpClient (HttpClient.create
) и поместите туда мои SSLContexts.
В конце концов у меня будет два WebClient, каждый из которых основан на собственном ReactorClientHttpConnector. Я не знаю, является ли это правильным подходом, поскольку я подозреваю, что в моем приложении будут две разные группы циклов событий.
Возможно, я могу связать метод .secure() и добавить разные SSLContexts следующим образом:
new ReactorClientHttpConnector(HttpClient.create()
.secure(sslContextSpec -> sslContextSpec.sslContext(sslContext))
.secure(sslContextSpec -> sslContextSpec.sslContext(sslContext2))
);
Однако я не уверен, будут ли они применяться и не будут переопределены, и будет ли это работать вообще.
Каким-то образом создайте один SSLContext, содержащий все необходимые сертификаты
Итак, как с этим справиться?
Создайте два разных WebClient
— это подход 1.
Создайте два разных ReactorClientHttpConnector с разными HttpClient (HttpClient.create) и поместите туда мои SSLContexts. В конце концов у меня будет два WebClient, каждый из которых основан на собственном ReactorClientHttpConnector. Я не знаю, является ли это правильным подходом, поскольку я подозреваю, что в моем приложении будут две разные группы циклов событий.
Два WebClient
будут совместно использовать группу цикла событий. Они будут использовать разные группы циклов событий, ТОЛЬКО если вы настроите их через runOn
или используете ReactorResourceFactory
. Смотрите больше здесь