17
17
18
18
import java .util .concurrent .CompletableFuture ;
19
19
import java .util .concurrent .ScheduledExecutorService ;
20
+ import java .util .function .Consumer ;
20
21
import software .amazon .awssdk .annotations .SdkPublicApi ;
21
22
import software .amazon .awssdk .services .sqs .SqsAsyncClient ;
22
23
import software .amazon .awssdk .services .sqs .internal .batchmanager .DefaultSqsAsyncBatchManager ;
35
36
* <p>
36
37
* This manager buffers client requests and sends them in batches to the service, enhancing efficiency by reducing the number of
37
38
* API requests. Requests are buffered until they reach a specified limit or a timeout occurs.
38
- * TODO : add consumer builder overloads for requests for all the methods.
39
39
*/
40
40
@ SdkPublicApi
41
41
public interface SqsAsyncBatchManager extends SdkAutoCloseable {
@@ -61,6 +61,19 @@ default CompletableFuture<SendMessageResponse> sendMessage(SendMessageRequest re
61
61
throw new UnsupportedOperationException ();
62
62
}
63
63
64
+
65
+ /**
66
+ * Buffers and batches {@link SendMessageRequest}s using a {@link Consumer} to configure the request,
67
+ * sending them as a {@link software.amazon.awssdk.services.sqs.model.SendMessageBatchRequest}.
68
+ * Requests are grouped by queue URL and override configuration, and sent when the batch size or timeout is reached.
69
+ *
70
+ * @param sendMessageRequest A {@link Consumer} to configure the SendMessageRequest to be buffered.
71
+ * @return CompletableFuture of the corresponding {@link SendMessageResponse}.
72
+ */
73
+ default CompletableFuture <SendMessageResponse > sendMessage (Consumer <SendMessageRequest .Builder > sendMessageRequest ) {
74
+ return sendMessage (SendMessageRequest .builder ().applyMutation (sendMessageRequest ).build ());
75
+ }
76
+
64
77
/**
65
78
* Buffers and batches {@link DeleteMessageRequest}s, sending them as a
66
79
* {@link software.amazon.awssdk.services.sqs.model.DeleteMessageBatchRequest}. Requests are grouped by queue URL and override
@@ -73,6 +86,19 @@ default CompletableFuture<DeleteMessageResponse> deleteMessage(DeleteMessageRequ
73
86
throw new UnsupportedOperationException ();
74
87
}
75
88
89
+
90
+ /**
91
+ * Buffers and batches {@link DeleteMessageRequest}s using a {@link Consumer} to configure the request,
92
+ * sending them as a {@link software.amazon.awssdk.services.sqs.model.DeleteMessageBatchRequest}.
93
+ * Requests are grouped by queue URL and override configuration, and sent when the batch size or timeout is reached.
94
+ *
95
+ * @param request A {@link Consumer} to configure the DeleteMessageRequest to be buffered.
96
+ * @return CompletableFuture of the corresponding {@link DeleteMessageResponse}.
97
+ */
98
+ default CompletableFuture <DeleteMessageResponse > deleteMessage (Consumer <DeleteMessageRequest .Builder > request ) {
99
+ return deleteMessage (DeleteMessageRequest .builder ().applyMutation (request ).build ());
100
+ }
101
+
76
102
/**
77
103
* Buffers and batches {@link ChangeMessageVisibilityRequest}s, sending them as a
78
104
* {@link software.amazon.awssdk.services.sqs.model.ChangeMessageVisibilityBatchRequest}. Requests are grouped by queue URL
@@ -85,6 +111,20 @@ default CompletableFuture<ChangeMessageVisibilityResponse> changeMessageVisibili
85
111
throw new UnsupportedOperationException ();
86
112
}
87
113
114
+ /**
115
+ * Buffers and batches {@link ChangeMessageVisibilityRequest}s using a {@link Consumer} to configure the request,
116
+ * sending them as a {@link software.amazon.awssdk.services.sqs.model.ChangeMessageVisibilityBatchRequest}.
117
+ * Requests are grouped by queue URL and override configuration, and sent when the batch size or timeout is reached.
118
+ *
119
+ * @param request A {@link Consumer} to configure the ChangeMessageVisibilityRequest to be buffered.
120
+ * @return CompletableFuture of the corresponding {@link ChangeMessageVisibilityResponse}.
121
+ */
122
+ default CompletableFuture <ChangeMessageVisibilityResponse > changeMessageVisibility (
123
+ Consumer <ChangeMessageVisibilityRequest .Builder > request ) {
124
+ return changeMessageVisibility (ChangeMessageVisibilityRequest .builder ().applyMutation (request ).build ());
125
+ }
126
+
127
+
88
128
/**
89
129
* Buffers and retrieves messages with {@link ReceiveMessageRequest}, with a maximum of 10 messages per request. Returns an
90
130
* empty message if no messages are available in SQS.
@@ -96,6 +136,19 @@ default CompletableFuture<ReceiveMessageResponse> receiveMessage(ReceiveMessageR
96
136
throw new UnsupportedOperationException ();
97
137
}
98
138
139
+ /**
140
+ * Buffers and retrieves messages with {@link ReceiveMessageRequest} using a {@link Consumer} to configure the request,
141
+ * with a maximum of 10 messages per request. Returns an empty message if no messages are available in SQS.
142
+ *
143
+ * @param request A {@link Consumer} to configure the ReceiveMessageRequest.
144
+ * @return CompletableFuture of the corresponding {@link ReceiveMessageResponse}.
145
+ */
146
+ default CompletableFuture <ReceiveMessageResponse > receiveMessage (
147
+ Consumer <ReceiveMessageRequest .Builder > request ) {
148
+ return receiveMessage (ReceiveMessageRequest .builder ().applyMutation (request ).build ());
149
+ }
150
+
151
+
99
152
interface Builder {
100
153
101
154
/**
@@ -106,6 +159,16 @@ interface Builder {
106
159
*/
107
160
Builder overrideConfiguration (BatchOverrideConfiguration overrideConfiguration );
108
161
162
+ /**
163
+ * Sets custom overrides for the BatchManager configuration using a {@link Consumer} to configure the overrides.
164
+ *
165
+ * @param overrideConfiguration A {@link Consumer} to configure the {@link BatchOverrideConfiguration}.
166
+ * @return This builder for method chaining.
167
+ */
168
+ default Builder overrideConfiguration (Consumer <BatchOverrideConfiguration .Builder > overrideConfiguration ) {
169
+ return overrideConfiguration (BatchOverrideConfiguration .builder ().applyMutation (overrideConfiguration ).build ());
170
+ }
171
+
109
172
/**
110
173
* Sets a custom {@link software.amazon.awssdk.services.sqs.SqsClient} for polling resources. This client must be closed
111
174
* by the caller.
0 commit comments