Служба Исполнителя в Службе Завершения - PullRequest
0 голосов
/ 12 марта 2020

У меня есть AWS Lambda, который принимает список записей в качестве входных данных (скажем, 1000 записей являются входными). Цель этой лямбды - записать эти записи в базу данных Dynamo. Исходя из этих входящих записей, я подготавливаю запросы BatchWriteItemRequest, каждый из которых содержит 25 PutRequest, в общей сложности 40 пакетов, каждый из которых содержит 25 PutRequest s.

Я использую CompletionService с Executor Service с фиксированным пулом потоков, равным 10. Служба завершения используется для одновременной отправки 10 пакетных запросов, и, следовательно, 250 запросов PUT отправляются в динамо параллельно через 10 вызовов BatchWriteItemRequest.

final CompletionService<ResultWrapper> completionService = new ExecutorCompletionService<>(
            getExecutorService(threadPoolSize));

Мой вопрос: Служба завершения следит за тем, чтобы все задачи выполнялись завершены, и его ответы возвращаются. Нужно ли явно отключать службу executor после того, как все (40) вызовы сделаны и вернули ответ? Каковы будут последствия, если я не отключу его явно?

Во-вторых, я создаю службу executor в качестве статического c экземпляра. Следовательно, если контейнер Lambda используется повторно, я не заканчиваю тем, что создаю службу executor для каждого вызова Lambda. Таким образом, если я закрою службу executor, и тот же самый лямбда-контейнер будет повторно использован, входящие запросы не будут выполнены. Разве закрытие службы исполнителя не является хорошим выбором?

for (int index = 0; index < 10; index++, submitted++) {
    completionService.submit(new Worker());
}
// total = 40
for (int index = 0; index < total; index++) {
      final Future<ResultWrapper> future = completionService.take();
      final ResultWrapper result = future.get();

      completed++;
      if (result == null) {
          continue;
      }

      // Once a task completes, submit one from those that remain
      if (submitted < total) {
          completionService.submit(new Worker());
          submitted++;
      }
  }

// Should I call executorService.shutdown() ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...