Я использую AWS SDK для Java 2.0 вместе с HTTP-клиентом Netty, и я заметил, что есть два разных пула потоков, которые могут эффективно обрабатывать ответ. Первый - это ThreadPoolExecutor, который можно переопределить как часть самого клиента службы, например,
DynamoDbAsyncClient dynamoClient = DynamoDbAsyncClient.builder()
.httpClient(httpClient)
.asyncConfiguration(ClientAsyncConfiguration.builder()
.advancedOption(SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR, awsSdkFutureCompletionExecutor)
.build())
Второй - событие l oop клиента HTTP Netty. В зависимости от того, где я присоединяюсь к потоку, я вижу, что он обрабатывается пулом потоков aws-java-sdk-NettyEventLoop
или sdk-async-response
.
Если я вызываю dynamoClient.query(request).join()
, я вижу, что aws-java-sdk-NettyEventLoop
продолжается любая дальнейшая обработка, тогда как dynamoClient.query(request).whenComplete(...)
означает, что поток sdk-async-response
выполняет обработку.
Есть ли рекомендуемый подход? Должен ли я предпочесть обработку в одном пуле потоков другому?