2013-07-29 1 views
0

Я полностью застрял. Я использую SQS для связи между сервером и сервером. Я добавляю сообщение «init_scrape» в свою очередь один раз в 3 часа ночи. Очередь подсчитывается скриптом на моем сервере каждые 5 минут, чтобы проверять сообщения в очереди и запускать задачи. Это мой электронный журнал:Amazon SQS - Сообщения продолжают появляться

2013-07-29 03:05:01,857 INFO Queue Messages Found: run_scrape init_scrape 
2013-07-29 03:05:01,858 INFO Init_Scrape Running 
2013-07-29 03:22:45,055 INFO init_scrape deleted from queue 
2013-07-29 03:22:45,211 INFO Queue Messages Found: run_scrape 

На данный момент, init_scrape был удален из очереди, оставляя только run_scrape. Абсолютно ничего не добавляет сообщение init_scrape в очереди, и все же это следующий лог:

2013-07-29 03:25:02,054 INFO Queue Messages Found: run_scrape init_scrape 
2013-07-29 03:25:02,055 INFO Init_Scrape Running 
2013-07-29 03:42:44,739 INFO init_scrape deleted from queue 
2013-07-29 03:42:44,879 INFO Queue Messages Found: run_scrape 

Почему это я только послать сообщение в очередь один раз, и все же это, кажется, появляющаяся даже когда мой сценарий удаляет его из очереди?

EDIT: Это как-то связано с visibility_timeout?

+1

Возможно, это вопрос, но вы вызываете DeleteMessage на полученное сообщение (init_scrape), когда он печатает «init_scrape, удаленный из очереди»? – jjm

ответ

1

SQS гарантирует, что сообщение будет доставлено не реже одного раза. Они не уверяют, что он не будет доставлен целую кучу раз. SQS действительно опрятен тем, что он масштабируется, но вы на самом деле выбираете какое-то странное поведение из-за того, как они сделали его масштабируемым, например, и сообщения, которые доставлены не по порядку, что делает его немного сложным для проектов, которые на самом деле не требуется шкала.

+0

http://stackoverflow.com/questions/13484845/what-is-a-good-practice-to-achieve-the-exactly-once-delivery-behavior-with-ama/13490008#13490008 – Jeff