Untitled
unknown
scala
2 years ago
2.3 kB
9
Indexable
import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest
import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse
import software.amazon.awssdk.services.sqs.model.Message
import software.amazon.awssdk.services.sqs.SqsAsyncClient
// Create SqsAsyncClient instance
val sqsClient: SqsAsyncClient = SqsAsyncClient.builder().build()
// Create ReceiveMessageRequest
val request = ReceiveMessageRequest.builder()
.queueUrl(queueUrl)
.maxNumberOfMessages(settings.maxBatchSize)
.waitTimeSeconds(settings.waitTimeSeconds)
.build()
// Asynchronously receive messages
sqsClient.receiveMessage(request).whenComplete { (result: ReceiveMessageResponse, exception: Throwable) =>
if (exception != null) {
// Handle error
failureCallback.invoke(exception)
} else {
// Process received messages
val messages: java.util.List[Message] = result.messages()
// Invoke success callback for each message or batch processing as needed
messages.forEach { message =>
successCallback.invoke(message)
}
}
}
// second
import scala.concurrent.{Future, ExecutionContext}
import software.amazon.awssdk.services.sqs.model.{ReceiveMessageRequest, ReceiveMessageResponse, Message}
import software.amazon.awssdk.services.sqs.SqsAsyncClient
// Create SqsAsyncClient instance
val sqsClient: SqsAsyncClient = SqsAsyncClient.builder().build()
// Create ReceiveMessageRequest
val request = ReceiveMessageRequest.builder()
.queueUrl(queueUrl)
.maxNumberOfMessages(settings.maxBatchSize)
.waitTimeSeconds(settings.waitTimeSeconds)
.build()
// Implicit ExecutionContext for running Futures
implicit val ec: ExecutionContext = ExecutionContext.global
// Asynchronously receive messages and handle success and failure
val receiveFuture: Future[Unit] = Future {
sqsClient.receiveMessage(request).handle[Unit] {
case Right(result) =>
// Process received messages
val messages: java.util.List[Message] = result.messages()
// Invoke success callback for each message or batch processing as needed
messages.forEach { message =>
successCallback.invoke(message)
}
case Left(exception) =>
// Handle error
failureCallback.invoke(exception)
}
}
// If you need to wait for the future to complete, you can use Await.resultEditor is loading...