我正在尝试使用iron.mq推送队列,但在收到消息后很难弄清楚如何正确响应队列。我意识到我可能也不完全理解队列系统的行为,但我的理解是它是这样的:
- 发送到队列的消息
- 消息从队列推送到我的端点
- 消息是"保留"的,直到我的终结点响应或超时
- 端点的响应是2xx(成功)并被删除,或者4xx/5xx失败,在这种情况下,队列将尝试向端点重新发送消息
例如,我的脚本(使用FuelPHP)有这样的内容:
$headers = Input::headers(); //gets array of headers sent from ironmq
$data = @file_get_contents('php://input'); //get the body
既然我已经收到消息,我想做两件事之一:
- 处理消息并向ironmq-服务器返回成功的响应
- 延迟进程(通过发送4xx/5xx?),并在定义的时间段后重新发送
但是。。。你如何回复推送信息?使用PHP SDK的deleteMessage方法会导致异常,因为消息似乎已不存在。
-
版本1。终结点响应为状态202。http://dev.iron.io/mq/reference/push_queues/#how_the_endpoint_should_handle_push_messages您应该在通过
deleteMessagePushStatus()
处理后明确删除消息 -
版本2。终结点已响应,状态为200。消息将自动删除,无需操作
所以-两种方式:
- 202->做长时间工作->
deleteMessagePushStatus()
- 4xx或5xx->4xx或5xx(多次)->200