|
17 | 17 | import lombok.experimental.SuperBuilder; |
18 | 18 | import org.reactivestreams.Publisher; |
19 | 19 | import reactor.core.publisher.Flux; |
| 20 | +import reactor.core.publisher.Mono; |
20 | 21 | import software.amazon.awssdk.services.sqs.SqsAsyncClient; |
21 | 22 | import software.amazon.awssdk.services.sqs.model.DeleteMessageRequest; |
22 | 23 | import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest; |
| 24 | +import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse; |
23 | 25 |
|
24 | 26 | import java.time.Duration; |
| 27 | +import java.util.concurrent.CompletableFuture; |
25 | 28 | import java.util.concurrent.CountDownLatch; |
| 29 | +import java.util.concurrent.ExecutionException; |
26 | 30 | import java.util.concurrent.atomic.AtomicBoolean; |
27 | 31 |
|
28 | 32 | @SuperBuilder |
@@ -148,30 +152,26 @@ public Flux<Message> publisher(final Consume task, |
148 | 152 | .maxNumberOfMessages(runContext.render(maxNumberOfMessage).as(Integer.class).orElseThrow()) |
149 | 153 | .build(); |
150 | 154 |
|
151 | | - sqsClient.receiveMessage(receiveRequest) |
152 | | - .whenComplete((messageResponse, throwable) -> { |
153 | | - if (throwable != null) { |
154 | | - fluxSink.error(throwable); |
155 | | - } else { |
156 | | - messageResponse.messages().forEach(message -> { |
157 | | - fluxSink.next(Message.builder().data(message.body()).build()); |
158 | | - }); |
159 | | - messageResponse.messages().forEach(message -> |
160 | | - sqsClient.deleteMessage(DeleteMessageRequest.builder() |
161 | | - .queueUrl(renderedQueueUrl) |
162 | | - .receiptHandle(message.receiptHandle()) |
163 | | - .build() |
164 | | - ) |
165 | | - ); |
166 | | - } |
167 | | - }); |
| 155 | + final CompletableFuture<ReceiveMessageResponse> future = sqsClient.receiveMessage(receiveRequest); |
| 156 | + |
168 | 157 | try { |
169 | | - Thread.sleep(100); |
| 158 | + ReceiveMessageResponse response = future.get(); |
| 159 | + response.messages().forEach(message -> fluxSink.next(Message.builder().data(message.body()).build())); |
| 160 | + |
| 161 | + response.messages().forEach(message -> |
| 162 | + sqsClient.deleteMessage(DeleteMessageRequest.builder() |
| 163 | + .queueUrl(renderedQueueUrl) |
| 164 | + .receiptHandle(message.receiptHandle()) |
| 165 | + .build() |
| 166 | + ) |
| 167 | + ); |
170 | 168 | } catch (InterruptedException e) { |
171 | 169 | Thread.currentThread().interrupt(); |
172 | 170 | isActive.set(false); // proactively stop polling |
173 | 171 | } |
174 | 172 | } |
| 173 | + } catch (ExecutionException e) { |
| 174 | + fluxSink.error(e.getCause() != null ? e.getCause() : e); |
175 | 175 | } catch (Throwable e) { |
176 | 176 | fluxSink.error(e); |
177 | 177 | } finally { |
|
0 commit comments