Использование push-очереди Iron.mq с PHP

Я пытаюсь использовать push-очередь iron.mq, но мне трудно понять, как правильно реагировать на очередь после получения сообщения. Я понимаю, что я также могу не до конца понять, как ведет себя система очередей, но я понимаю, что это примерно так:

  1. Сообщение отправлено в очередь
  2. Сообщение отправлено из очереди в мою конечную точку
  3. Сообщение «зарезервировано» до тех пор, пока моя конечная точка не ответит или не истечет время ожидания
  4. Конечная точка отвечает либо 2xx (успех), и она удаляется, либо ошибкой 4xx/5xx, и в этом случае очередь попытается повторно отправить сообщение в конечную точку.

Например, мой скрипт (использующий FuelPHP) имеет что-то вроде этого:

    $headers = Input::headers(); //gets array of headers sent from ironmq
    $data = @file_get_contents('php://input'); //get the body

Теперь, когда я получил сообщение, я хочу сделать одну из двух вещей:

  1. Обрабатывать сообщение и возвращать ответ на серверы ironmq о том, что все прошло успешно.
  2. Задержите процесс (отправив 4xx/5xx?) и повторно отправив его через определенный период времени.

Но... как вы отвечаете на push-сообщение? Использование метода deleteMessage PHP SDK вызывает исключение, поскольку сообщение больше не существует.


person Anti-Dentite    schedule 27.06.2013    source источник


Ответы (1)


  • Версия 1. Конечная точка ответила со статусом 202. http://dev.iron.io/mq/reference/push_queues/#how_the_endpoint_should_handle_push_messages Вы должны явно удалить сообщение после обработки через deleteMessagePushStatus()

  • Версия 2. Конечная точка ответила со статусом 200. Сообщение будет удалено автоматически, никаких действий не требуется.

так что - два пути:

  1. 202 -> делать долгую работу -> deleteMessagePushStatus()
  2. 4xx или 5xx -> 4xx или 5xx (много раз) -> 200
person thousandsofthem    schedule 27.06.2013
comment
Спасибо. deleteMessagePushStatus() работает для удаления сообщения. Однако я не вижу в SDK метода, который отправляет 4xx или 5xx. Есть ли один? - person Anti-Dentite; 28.06.2013
comment
@Anti-Dentite ваша конечная точка — это та, которая вернет 4xx или 5xx, если у нее возникнут проблемы. IronMQ будет повторять количество попыток, которое вы установили в очереди push-уведомлений. Если ваша конечная точка возвращает 200, все в порядке, сообщение удаляется автоматически, как и сказал ТЫСЯЧ. Или вы можете вернуть 202, если вам нужно много времени для обработки сообщения. - person Travis Reeder; 30.06.2013