2014-11-10 4 views
1

У меня есть сообщения внутри amazon SQS. для некоторых сообщений мне нужно выполнить задержку в шесть часов, прежде чем я смогу начать работать над ними (задержка - это предоставление). один решение будет Thread.Sleep(6h). Мне не нравится это решение, потому что я боюсь, что что-то случится с потоком, и я потеряю данные. другим решением будет прочитать сообщение, если прошло 6 часов, а если не вернуть сообщение в очередь. снова мне это не нравится, потому что процедура будет много. Есть ли лучшее решение?Задержка задания в AWS

ответ

0

Можете ли вы создать отдельные множественные очереди и поместить элементы очереди отдельно.

Пример 1:

Вы можете иметь 6 очередей, как Queue0, queue1, Queue2, Queue3, Queue4, Queue5 и использовать хэш-функцию, как хэш (х) = ток-час% 6 - эта функция вернет значения от 0 до 5, и вы можете поместить элементы в Queue_f (x) и прочитать очереди в зависимости от текущего времени.

Пример 2:

Если текущее время 01:00 часов вы можете создать отдельные очереди, как Queue0700Hours, если текущее время 02:00 часов вы можете создать еще одну новую очередь как Queue0800Hours как мудрый и иди.

Таким образом, вы отключаете необходимость ждать/останавливать обработку и собирать производителей и потребителей самостоятельно на основе текущей метки времени.

+0

Я думал о создании другой выделенной очереди. Я надеялся, что смогу избежать этого. Не существует ли из коробки решение Amazon обеспечивает задержку сообщения в течение нескольких часов? – Tsahi

+0

Непосредственный способ будет напоминать добавление элементов в очередь и немедленное чтение их другим процессом. Установите очередь ожидания тайм-аута видимости 6 часов. Таким образом, элемент очереди будет выбран, как только он будет нажат, и когда элемент будет выбран - он появится снова через 6 часов. Чтобы обеспечить и уверенно обрабатывать предметы через 6 часов, вы увидите, что число повторных попыток равно 1. –

Смежные вопросы