Я разрабатываю вызов API, который принимает список имен приложений и возвращает карту с именем приложения в качестве ключа и списком тегов изображений, которые соответствующее приложение имеет в доверенном хранилище docker. Обычно размер входного списка составляет около 10. Но, поскольку выполнение запроса DTR для каждого приложения занимает около 3-4 секунд, среднее время ответа API составляет 35-40 секунд. Я пытаюсь сделать параллельный вызов для всех приложений в списке. Я использовал CompletableFuture
с @Async
методом, но это не помогает сократить время отклика. Вот мой код:
Map<String, List<String>> getAppsImageMapResp(List<String> apps, String pageSize) {
Map<String, List<String>> appTagsMap = new ConcurrentHashMap<>()
for(String app : apps) {
CompletableFuture<List<String>> appImageList = supplyAsync({ ->
getDockerRepoTags(app, pageSize)
})
appTagsMap.put(application, appImageList.get())
}
return appTagsMap
}
@Async
List<String> getDockerRepoTags(String app, String pageSize) {
return restTemplate.exchange("https://dtrhost/org/${app}/tags?pageSize=${pageSize}")
}