Class ManyAsyncStepsExample

All Implemented Interfaces:
com.amazonaws.services.lambda.runtime.RequestStreamHandler

public class ManyAsyncStepsExample extends DurableHandler<ManyAsyncStepsExample.Input,ManyAsyncStepsExample.Output>
Performance test example demonstrating concurrent async steps.

This example tests the SDK's ability to handle many concurrent operations:

  • Constructor Details

    • ManyAsyncStepsExample

      public ManyAsyncStepsExample()
  • Method Details

    • handleRequest

      Description copied from class: DurableHandler
      Handle the durable execution.
      Specified by:
      handleRequest in class DurableHandler<ManyAsyncStepsExample.Input,ManyAsyncStepsExample.Output>
      Parameters:
      input - User input
      context - Durable context for operations
      Returns:
      Result
    • createConfiguration

      protected DurableConfig createConfiguration()
      Description copied from class: DurableHandler
      Template method for creating configuration. Override this method to provide custom DurableExecutionClient, SerDes, or other configuration.

      The LambdaDurableFunctionsClient is a wrapper that customers should use to inject their own configured LambdaClient. This allows full control over AWS SDK configuration including credentials, region, HTTP client, and retry policies.

      Basic example with custom region and credentials:

      
       @Override
       protected DurableConfig createConfiguration() {
           // Create custom Lambda client with specific configuration
           var lambdaClient = LambdaClient.builder()
               .region(Region.US_WEST_2)
               .credentialsProvider(ProfileCredentialsProvider.create("my-profile"))
               .build();
      
           // Wrap the Lambda client with LambdaDurableFunctionsClient
           var durableClient = new LambdaDurableFunctionsClient(lambdaClient);
      
           return DurableConfig.builder()
               .withDurableExecutionClient(durableClient)
               .build();
       }
       

      Advanced example with AWS CRT HTTP Client for high-performance scenarios:

      
       @Override
       protected DurableConfig createConfiguration() {
           // Configure AWS CRT HTTP Client for optimal performance
           var crtHttpClient = AwsCrtAsyncHttpClient.builder()
               .maxConcurrency(50)
               .connectionTimeout(Duration.ofSeconds(30))
               .connectionMaxIdleTime(Duration.ofSeconds(60))
               .build();
      
           // Create Lambda client with CRT HTTP client
           var lambdaClient = LambdaClient.builder()
               .region(Region.US_EAST_1)
               .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
               .httpClient(crtHttpClient)
               .overrideConfiguration(ClientOverrideConfiguration.builder()
                   .retryPolicy(RetryPolicy.builder()
                       .numRetries(5)
                       .build())
                   .build())
               .build();
      
           // Wrap with LambdaDurableFunctionsClient
           var durableClient = new LambdaDurableFunctionsClient(lambdaClient);
      
           return DurableConfig.builder()
               .withDurableExecutionClient(durableClient)
               .withSerDes(customSerDes)  // Optional: custom SerDes for user data
               .withExecutorService(customExecutor)  // Optional: custom thread pool
               .build();
       }
       
      Overrides:
      createConfiguration in class DurableHandler<ManyAsyncStepsExample.Input,ManyAsyncStepsExample.Output>
      Returns:
      DurableConfig with desired configuration