15
15
16
16
package software .amazon .awssdk .services .sqs .internal .batchmanager ;
17
17
18
+ import java .time .Duration ;
18
19
import java .util .concurrent .CompletableFuture ;
19
20
import java .util .concurrent .ScheduledExecutorService ;
20
21
import software .amazon .awssdk .annotations .SdkInternalApi ;
22
+ import software .amazon .awssdk .annotations .SdkTestInternalApi ;
21
23
import software .amazon .awssdk .services .sqs .SqsAsyncClient ;
22
24
import software .amazon .awssdk .services .sqs .batchmanager .BatchOverrideConfiguration ;
23
25
import software .amazon .awssdk .services .sqs .batchmanager .SqsAsyncBatchManager ;
39
41
public final class DefaultSqsAsyncBatchManager implements SqsAsyncBatchManager {
40
42
// TODO : update the validation here while implementing this class in next PR
41
43
private final SqsAsyncClient client ;
42
- private final ScheduledExecutorService scheduledExecutor ;
43
- private final BatchOverrideConfiguration overrideConfiguration ;
44
44
45
45
private final BatchManager <SendMessageRequest , SendMessageResponse , SendMessageBatchResponse > sendMessageBatchManager ;
46
46
@@ -53,34 +53,69 @@ public final class DefaultSqsAsyncBatchManager implements SqsAsyncBatchManager {
53
53
54
54
private DefaultSqsAsyncBatchManager (DefaultBuilder builder ) {
55
55
this .client = Validate .notNull (builder .client , "client cannot be null" );
56
- this .scheduledExecutor = Validate .notNull (builder .scheduledExecutor , "scheduledExecutor cannot be null" );
57
- // TODO : create overrideConfiguration with Default values if null
58
- this .overrideConfiguration = builder .overrideConfiguration ;
59
56
60
- sendMessageBatchManager = null ;
61
- deleteMessageBatchManager = null ;
62
- changeMessageVisibilityBatchManager = null ;
57
+ ScheduledExecutorService scheduledExecutor = builder .scheduledExecutor ;
58
+
59
+ this .sendMessageBatchManager = BatchManager
60
+ .requestBatchManagerBuilder (SendMessageRequest .class , SendMessageResponse .class , SendMessageBatchResponse .class )
61
+ .batchFunction (SqsBatchFunctions .sendMessageBatchAsyncFunction (client ))
62
+ .responseMapper (SqsBatchFunctions .sendMessageResponseMapper ())
63
+ .batchKeyMapper (SqsBatchFunctions .sendMessageBatchKeyMapper ())
64
+ .overrideConfiguration (sendMessageConfig (builder .overrideConfiguration )).scheduledExecutor (scheduledExecutor )
65
+ .build ();
66
+ this .deleteMessageBatchManager = BatchManager
67
+ .requestBatchManagerBuilder (DeleteMessageRequest .class , DeleteMessageResponse .class , DeleteMessageBatchResponse .class )
68
+ .batchFunction (SqsBatchFunctions .deleteMessageBatchAsyncFunction (client ))
69
+ .responseMapper (SqsBatchFunctions .deleteMessageResponseMapper ())
70
+ .batchKeyMapper (SqsBatchFunctions .deleteMessageBatchKeyMapper ())
71
+ .overrideConfiguration (deleteMessageConfig (builder .overrideConfiguration )).scheduledExecutor (scheduledExecutor )
72
+ .build ();
73
+ this .changeMessageVisibilityBatchManager = BatchManager
74
+ .requestBatchManagerBuilder (ChangeMessageVisibilityRequest .class , ChangeMessageVisibilityResponse .class ,
75
+ ChangeMessageVisibilityBatchResponse .class )
76
+ .batchFunction (SqsBatchFunctions .changeMessageVisibilityBatchAsyncFunction (client ))
77
+ .responseMapper (SqsBatchFunctions .changeMessageVisibilityResponseMapper ())
78
+ .batchKeyMapper (SqsBatchFunctions .changeMessageVisibilityBatchKeyMapper ())
79
+ .overrideConfiguration (changeMessageVisibilityConfig (builder .overrideConfiguration ))
80
+ .scheduledExecutor (scheduledExecutor ).build ();
81
+
82
+ //TODO : this will be updated while implementing the Receive Message Batch Manager
63
83
receiveMessageBatchManager = null ;
64
84
}
65
85
86
+
87
+ @ SdkTestInternalApi
88
+ public DefaultSqsAsyncBatchManager (
89
+ SqsAsyncClient client ,
90
+ BatchManager <SendMessageRequest , SendMessageResponse , SendMessageBatchResponse > sendMessageBatchManager ,
91
+ BatchManager <DeleteMessageRequest , DeleteMessageResponse , DeleteMessageBatchResponse > deleteMessageBatchManager ,
92
+ BatchManager <ChangeMessageVisibilityRequest , ChangeMessageVisibilityResponse ,
93
+ ChangeMessageVisibilityBatchResponse > changeMessageVisibilityBatchManager ) {
94
+ this .sendMessageBatchManager = sendMessageBatchManager ;
95
+ this .deleteMessageBatchManager = deleteMessageBatchManager ;
96
+ this .changeMessageVisibilityBatchManager = changeMessageVisibilityBatchManager ;
97
+ receiveMessageBatchManager = null ;
98
+ this .client = client ;
99
+ }
100
+
66
101
@ Override
67
102
public CompletableFuture <SendMessageResponse > sendMessage (SendMessageRequest request ) {
68
- return SqsAsyncBatchManager . super . sendMessage (request );
103
+ return sendMessageBatchManager . batchRequest (request );
69
104
}
70
105
71
106
@ Override
72
107
public CompletableFuture <DeleteMessageResponse > deleteMessage (DeleteMessageRequest request ) {
73
- return SqsAsyncBatchManager . super . deleteMessage (request );
108
+ return deleteMessageBatchManager . batchRequest (request );
74
109
}
75
110
76
111
@ Override
77
112
public CompletableFuture <ChangeMessageVisibilityResponse > changeMessageVisibility (ChangeMessageVisibilityRequest request ) {
78
- return SqsAsyncBatchManager . super . changeMessageVisibility (request );
113
+ return changeMessageVisibilityBatchManager . batchRequest (request );
79
114
}
80
115
81
116
@ Override
82
117
public CompletableFuture <ReceiveMessageResponse > receiveMessage (ReceiveMessageRequest request ) {
83
- return SqsAsyncBatchManager . super . receiveMessage (request );
118
+ return receiveMessageBatchManager . batchRequest (request );
84
119
}
85
120
86
121
public static SqsAsyncBatchManager .Builder builder () {
@@ -89,6 +124,33 @@ public static SqsAsyncBatchManager.Builder builder() {
89
124
90
125
@ Override
91
126
public void close () {
127
+ sendMessageBatchManager .close ();
128
+ deleteMessageBatchManager .close ();
129
+ changeMessageVisibilityBatchManager .close ();
130
+ }
131
+
132
+ private BatchOverrideConfiguration createConfig (BatchOverrideConfiguration overrideConfiguration ) {
133
+ BatchOverrideConfiguration .Builder config = BatchOverrideConfiguration .builder ();
134
+ if (overrideConfiguration == null ) {
135
+ config .maxBatchItems (10 );
136
+ config .maxBatchOpenInMs (Duration .ofMillis (200 ));
137
+ } else {
138
+ config .maxBatchItems (overrideConfiguration .maxBatchItems ().orElse (10 ));
139
+ config .maxBatchOpenInMs (overrideConfiguration .maxBatchOpenInMs ().orElse (Duration .ofMillis (200 )));
140
+ }
141
+ return config .build ();
142
+ }
143
+
144
+ private BatchOverrideConfiguration sendMessageConfig (BatchOverrideConfiguration overrideConfiguration ) {
145
+ return createConfig (overrideConfiguration );
146
+ }
147
+
148
+ private BatchOverrideConfiguration deleteMessageConfig (BatchOverrideConfiguration overrideConfiguration ) {
149
+ return createConfig (overrideConfiguration );
150
+ }
151
+
152
+ private BatchOverrideConfiguration changeMessageVisibilityConfig (BatchOverrideConfiguration overrideConfiguration ) {
153
+ return createConfig (overrideConfiguration );
92
154
}
93
155
94
156
public static final class DefaultBuilder implements SqsAsyncBatchManager .Builder {
0 commit comments