Я работаю над приложением, чей рабочий процесс управляется передачей сообщений в SQS, используя boto.Как получить все сообщения в очереди Amazon SQS с помощью библиотеки boto в Python?
Моя очередь SQS постепенно растет, и у меня нет возможности проверить, сколько элементов она должна содержать.
Теперь у меня есть демон, который периодически обследует очередь и проверяет, есть ли у меня набор элементов фиксированного размера. Например, рассмотрим следующую «очередь»:
q = ["msg1_comp1", "msg2_comp1", "msg1_comp2", "msg3_comp1", "msg2_comp2"]
Теперь я хочу, чтобы проверить, есть ли у меня «msg1_comp1», «msg2_comp1» и «msg3_comp1» в очереди вместе в какой-то момент времени, но я не» t знать размер очереди.
После просмотра через API, кажется, вы можете получить только один элемент, или фиксированное количество элементов в очереди, но не все:
>>> rs = q.get_messages()
>>> len(rs)
1
>>> rs = q.get_messages(10)
>>> len(rs)
10
Предложение предложено в ответах бы на получите, например, 10 сообщений в цикле до тех пор, пока я ничего не получу, но сообщения в SQS имеют тайм-аут видимости, а это означает, что если я опросу элементов из очереди, они не будут действительно удалены, они будут невидимыми только на короткий период времени.
Есть ли простой способ получить все сообщения в очереди, не зная, сколько их есть?
Я не могу сделать это, так как сообщения в SQS имеют тайм-аут видимости, так что если я сначала получить 10 сообщений, затем цикл несколько раз, в следующий раз я могу получать те же 10 сообщений, что и тайм-аут. Я думаю об использовании 'dump()', но мне нужно будет прочитать файл после, что кажется глупым, я что-то упускаю? (Я могу установить visibility_timeout на очень долгое время, но это кажется уродливым). –
@linker - вы сказали, что вам нужно проверить «n» конкретные сообщения. означает ли это, что есть некоторые критерии соответствия, по которым вы сравниваете каждое сообщение? –
Извините, если это было непонятно, я обновил свой пост. –