SQS Сообщение остается на борту - PullRequest
0 голосов
/ 18 октября 2019

Я использую sqs для обработки сообщений. Мой тайм-аут видимости составляет 2 минуты. Но я заметил, что некоторые сообщения находятся в промежуточном состоянии, даже мой потребитель обрабатывает это сообщение. Я не могу понять это, почему некоторые сообщения находятся в полете? Как я могу удалить эти сообщения?

1 Ответ

0 голосов
/ 19 октября 2019

Я предполагаю, что приложение многократно загружается приложением. Другая возможность состоит в том, что кто-то просматривает ваши элементы очереди в консоли 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);
    }
}
...