0

I'm trying to migrate my codebase, from aws sqs v1 sdk to aws sqs v2 sdk.

Here's my old code.

CompletableFuture<String> sendMessage(String url, String message){

       CompletableFuture<SendMessageResult> future = new CompletableFuture<>();

       amazonSQSAsync.sendMessageAsync(url, message, new ResponseHandler.SendMessageHandler(future));
       // this responseHandler simply completes the future on success.

       return future.thenApply(
           x-> 
           {
              return x.getMessageId();
           }
        );
}

Here's my new code.

CompletableFuture<String> sendMessage(String url, String message){

     SendMessageRequest sendMessageRequest = 
             SendMessageRequest
               .builder()
               .queueUrl(url)
               .messageBody(message)
               .build();

    CompletableFuture<SendMessageResponse> sendMessageResponseCompletableFuture =
        sqsAsyncClient.sendMessage(sendMessageRequest);
    return sendMessageResponseCompletableFuture.thenApply(
      x -> {
        return x.messageId();
      }
    );
}

Here's my initialisation of v1 and v2 clients.

V1

  return AmazonSQSAsyncClientBuilder
        .standard()
        .withRegion(cloudRegion)
        .withCredentials(credentialsProvider)
        .withExecutorFactory(() -> executor).build();

V2

return SqsAsyncClient
        .builder()
        .region(Region.of(cloudRegion))
        .credentialsProvider(credentialsProvider)
        .httpClientBuilder(
            NettyNioAsyncHttpClient.builder().maxConcurrency(100).connectionTimeout(
                Duration.ofMinutes(5)
            ))
        .build();

With V1 I've tried pushing 2k messages/second, and it worked fine (In fact I can push more also). Whereas, with V2 I'm only able to push ~700 messages/second.

I know that sqs v2 performance cannot go down compared to sqs v1. But I'm doing something wrong, and not able to find out what it is..

Any help is really appreciated.

0 Answers0