使用AWS SDK for .NET
中的AmazonSQSClient
可以解决该问题。该客户端提供了异步API SendMessageBatchAsync
来将批处理消息发送到SQS并返回异步任务。您可以使用 await Task.WhenAll
来等待所有异步任务完成,然后进行下一步操作。
示例代码如下:
using Amazon;
using Amazon.SQS;
using Amazon.SQS.Model;
public async Task> SendMessagesAsync(
IEnumerable entries,
string queueUrl)
{
var responses = new List();
var client = new AmazonSQSClient(RegionEndpoint.USEast1);
const int MaxMessagesPerRequest = 10;
var batches = entries.Batch(MaxMessagesPerRequest);
foreach (var batch in batches)
{
var request = new SendMessageBatchRequest
{
Entries = batch.ToList(),
QueueUrl = queueUrl
};
var response = await client.SendMessageBatchAsync(request);
responses.Add(response);
}
return responses.AsReadOnly();
}
public async Task ProcessMessagesAsync(IEnumerable messages)
{
var tasks = messages.Select(async message =>
{
// Process message here
});
await Task.WhenAll(tasks.ToArray());
}
在使用上述代码发送异步批处理消息后,使用另一异步方法 ProcessMessagesAsync
处理从队列中接收到的所有消息。当发送和处理完所有消息后,您可以结束Lambda函数。