Использование Apache HttpClient 4.5.x в моем клиентском веб-приложении, которое подключается (и входит в систему) к другому (скажем, главному) веб-приложению сервера.
Отношения между этими 2 веб-приложениями очень разные.для многих - то есть для какого-то запроса пользователя в клиентском веб-приложении, он должен войти в систему как другой пользователь + сделать остальной вызов в веб-приложении сервера.Таким образом, необходимо некоторое разделение хранилищ cookie, и нет способа (есть?) получить / установить хранилище cookie после создания экземпляра httpclient, поэтому каждый поток запросов, полученный в клиентском веб-приложении, выполняет что-то подобное (и требуетдля оптимизации):
HttpClient client = HttpClientBuilder.create().setDefaultCookieStore(new BasicCookieStore()).build();
//Now POST to login end point and get back JSESSIONID cookie and then make one REST call, and then the client object goes out of scope when the request ends.
Я надеялся спросить о наилучшей практике кэширования объекта экземпляра httpclient, поскольку он тяжелый, и предполагается, что его можно использовать повторно как минимум для нескольких запросов, если не для всего клиентского веб-приложения.как статический синглтон.
В частности, я надеялся на совет, какой из этих (если таковые имеются) подходов будет представлять собой наилучшую практику:
Используйтеstatic ConcurrentHashMap для кэширования httpclient и связанного с ним basiccookiestore для каждого «пользователя» в клиентском веб-приложении и входа в систему только в том случае, если срок действия кэшированного cookie-файла близок к концу.Не уверен насчет использования памяти, и неиспользуемый / редко используемый httpclient остается в памяти без выселения.
Кэшируйте только Cookie (каким-то образом), но воссоздайте новый httpclientвозражать всякий раз, когда возникает необходимость использовать этот файл cookie для вызова покоя.Это сохраняет предыдущий вызов для входа в систему до истечения срока действия cookie, но повторное использование htptclient не требуется.
PooledConnectionManager - но не может легко найти примеры, хотя может потребовать разработкистратегия выселения, максимальное количество потоков и т. д. (может быть сложным).
Есть ли лучший способ сделать это?Спасибо.
Ссылки:
Обычно рекомендуется иметь один экземпляр HttpClient для каждого компонента связи или дажеза приложение