Я предполагаю, что приложение многократно загружается приложением. Другая возможность состоит в том, что кто-то просматривает ваши элементы очереди в консоли AWS (он сообщает: «Сообщения, отображаемые в консоли, не будут доступны другим приложениям, пока консоль не прекратит опрос сообщений».)
При загрузкесообщение от SQS, одним из его свойств является дескриптор квитанции. Вы используете это, чтобы удалить сообщение, и оно будет работать, даже если сообщение находится в полете.
using (AmazonSQSClient client = new AmazonSQSClient(RegionEndpoint.USWest1))
{
ReceiveMessageRequest request = new ReceiveMessageRequest(QueueUrl)
{
MaxNumberOfMessages = 10,
WaitTimeSeconds = 20,
AttributeNames = new List<string> { "All" },
};
ReceiveMessageResponse response = client.ReceiveMessage(request);
foreach (Message message in response.Messages)
{
// do processing
// assuming success
DeleteMessageRequest request2 = new DeleteMessageRequest
{
QueueUrl = QueueUrl,
ReceiptHandle = message.ReceiptHandle,
});
client.DeleteMessage(request2);
}
}