Обработка элементов в очереди SQS с помощью php-скрипта

Вот моя ситуация:

У меня есть скрипт, который получает необработанные данные, сохраняет их в базе данных, получает идентификатор элемента, а затем отправляет его в очередь Amazon SQS.

У меня есть другой скрипт (написанный на PHP), который извлекает необработанные данные из базы данных и обрабатывает их. (обычно это занимает пару минут.

Недостающая часть заключается в том, как получить сообщения из SQS для обработки. Частота обработки новых данных варьируется, она может варьироваться от нескольких элементов в час до десятков элементов в минуту.

Одним из способов было бы иметь задание cron, которое запрашивает SQS для новых сообщений и запускает сценарий обработки (он должен быть многопоточным и написан на чем-то другом, а не на php. Возможно, на Python или Ruby). Проблема с cron заключается в том, что он довольно неэффективен, в фазах высокой нагрузки он будет перегружен, а в тихих фазах будет выполнять бесполезные вызовы.

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

Любые мысли о лучшем решении? Подходит ли SQS для этой задачи? Каков наиболее эффективный способ прослушивания и обработки очереди?


person applechief    schedule 20.11.2011    source источник
comment
В клиентской библиотеке sqs ruby ​​есть метод poll, который постоянно опрашивает очередь и при получении сообщения в очереди передает его блоку. queue.poll() do |msg| #process the message end   -  person randomuser    schedule 25.11.2011
comment
Спасибо, звучит неплохо, буду изучать. Любое предложение о наилучшем способе многопоточности в ruby?   -  person applechief    schedule 26.11.2011
comment
Если у вас нет реальной необходимости обмениваться состоянием между этими рабочими процессами, будет проще просто запустить несколько процессов. Вы можете использовать что-то вроде Supervisord, чтобы запускать их все, контролировать их и т. д.   -  person Eran Sandler    schedule 07.02.2012