Все это работает в VP C, поэтому другой код не взаимодействует с этими очередями. Это проверка. Сценарий:
- Настроить обработчик очереди для очереди SQS
- Pu sh набор неисправных сообщений в очередь
- Дождитесь прибытия этих сообщений в DLQ (получить счетчик очереди SQS, подождать, пока он достигнет нуля)
- Проверить счетчик в DLQ
- Если счетчик не совпадает с ожидаемым числом, захватите сообщения в очередь и выгружать их в консоль
Функции:
getAllMessages = async function (url, count) {
let maxResults = count > 10 ? 10 : count;
let params = {
QueueUrl: url,
MaxNumberOfMessages: maxResults
};
const { Messages } = await sqs.receiveMessage(params).promise();
return Messages;
};
getSqsMsgCount = async function (url) {
let params = {
QueueUrl: url,
AttributeNames: ['ApproximateNumberOfMessages',
'ApproximateNumberOfMessagesNotVisible',
'ApproximateNumberOfMessagesDelayed']
};
return sqs.getQueueAttributes(params).promise().then(data => {
return parseInt(data.Attributes.ApproximateNumberOfMessages) +
parseInt(data.Attributes.ApproximateNumberOfMessagesNotVisible) +
parseInt(data.Attributes.ApproximateNumberOfMessagesDelayed);
}, err => {
console.log(`Failed to retrieve sqs message count for ${url}`);
Promise.reject(err);
});
};
Проблема в том, что getSqsMsgCount
сообщает мне, что в очереди 11 сообщений (что на 4 больше, чем ожидалось), но когда я звоню getAllMessages
, я всегда получаю ровно один.
Как мне получить одно из этих двух:
- Сообщения, полученные от
receiveMessage
, чтобы соответствовать номеру из функция getSqsMsgCount
getSqsMsgCount
функция, чтобы быть более точной
Я знаю, что в getSqsMsgCount
написано «Приблизительно», но это такое небольшое количество сообщений (11 самое большее) кажется разумным ожидать, что код будет иметь правильный счет. Поскольку это DLQ, сообщения больше нигде не будут передаваться. В DLQ нет слушателей очереди. Я пробовал добавить несколько минут ожидания, прежде чем проверять счетчик DLQ.