Skip to content

Commit c7d12ce

Browse files
committed
(java): Use futures to write concurrently
1 parent c79500c commit c7d12ce

2 files changed

Lines changed: 10 additions & 2 deletions

File tree

TODO.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Lambdas
44

5-
- Use futures / async to write to DynamoDB concurrently in the Rust & Java lambdas
5+
- Use futures / async to write to DynamoDB concurrently in the Rust lambda
66

77
## Benchmark
88

lambda/java/JavaLambda/src/main/java/alex9smith/App.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package alex9smith;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.concurrent.CompletableFuture;
6+
37
import com.amazonaws.services.lambda.runtime.Context;
48
import com.amazonaws.services.lambda.runtime.RequestHandler;
59
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
@@ -80,6 +84,7 @@ public App() {
8084

8185
@Override
8286
public SQSEvent handleRequest(final SQSEvent input, final Context context) {
87+
ArrayList<CompletableFuture<PutItemResponse>> futures = new ArrayList<>();
8388
for (SQSMessage message : input.getRecords()) {
8489
try {
8590
jsonSchema.validate(message.getBody(), InputFormat.JSON);
@@ -88,7 +93,7 @@ public SQSEvent handleRequest(final SQSEvent input, final Context context) {
8893
.tableName(tableName)
8994
.item(event.toAttributeMap())
9095
.build();
91-
dynamoDbClient.putItem(request).join();
96+
futures.add(dynamoDbClient.putItem(request));
9297

9398
} catch (JsonProcessingException e) {
9499
e.printStackTrace();
@@ -97,6 +102,9 @@ public SQSEvent handleRequest(final SQSEvent input, final Context context) {
97102

98103
}
99104

105+
List<PutItemResponse> results = futures.stream().map(CompletableFuture::join).toList();
106+
System.out.println(results.size());
107+
100108
return input;
101109
}
102110
}

0 commit comments

Comments
 (0)