У меня есть требование, чтобы прочитать все сообщения в моей очереди Амазонки SQS в 1, а затем отсортировать их на основе созданной метки времени и сделать бизнес-логику на нем.Amazon SQS Long Polling не возвращает все сообщения
Чтобы убедиться, что все хосты SQS отмечены для сообщений, я включил длительный опрос. То, как я это делал, - установить время ожидания по умолчанию для очереди как 10 секунд. (Любое значение больше 0 будет включать длительный опрос).
Однако, когда я попытался прочитать очередь, он все равно не дал мне всех сообщений, и мне пришлось делать несколько чтений, чтобы получить все сообщения. Я даже включил длинный опрос через код для каждого запроса на получение, все еще не работал. Ниже приведен код, который я использую.
AmazonSQSClient sqsClient = new AmazonSQSClient(new ClasspathPropertiesFileCredentialsProvider());
sqsClient.setEndpoint("sqs.us-west-1.amazonaws.com");
String queueUrl = "https://sqs.us-west-1.amazonaws.com/12345/queueName";
ReceiveMessageRequest receiveRequest = new ReceiveMessageRequest().withQueueUrl(queueUrl).withMaxNumberOfMessages(10).withWaitTimeSeconds(20);
List<Message> messages = sqsClient.receiveMessage(receiveRequest).getMessages();
У меня есть 3 сообщений в очереди и каждый раз, когда я запускаю код, я получить другой результат, иногда я получаю все 3 сообщения, иногда только 1. таймаут видимости я поставил в 2 секунды, просто устранить сообщения становятся невидимыми в качестве причины не видеть их в чтении. Это ожидаемое поведение при коротком опросе. Долгий опрос должен устранить несколько опросов. Что-то я здесь делаю неправильно?
Благодаря
Получение пустого возврата из длинного опроса не гарантирует, что очередь пуста. Лучший индикатор пустоты возвращается обратно, когда вы запрашиваете количество сообщений в очереди, но это также не гарантируется. – tster
@tster Я никогда не сталкивался с условием, когда длинный опрос возвратил 0 сообщений, несмотря на то, что в очереди были сообщения, хотя это теоретически возможно - однако это противоречит документированному утверждению о том, что длинный ответ опроса «будет содержать по крайней мере одно из доступных сообщений ", если они есть. Если это произойдет, это должно быть исключение. –