Сообщения Amazon SQS не удаляются в PHP

Я перечисляю сообщения в своей очереди Amazon SQS, а затем имею возможность удалять их по одному. Когда я удаляю сообщение, я получаю сообщение УСПЕХА. Однако ни одно сообщение не удаляется, и все они возвращаются в очередь.

Вот код очереди списка:

<?php
include_once("sdk.class.php");

// Instantiate
$sqs = new AmazonSQS();
$rows = $sqs->get_queue_size('https://sqs.us-east-1.amazonaws.com/199992002821/SomeQueueSQS');

echo "<table>";
echo "<tr>";
echo "<td width=20 valign=top bgcolor=" . $adHeading . " align=left><strong>No</strong></td>";
echo "<td width=200 valign=top bgcolor=" . $adHeading . " align=left><strong>Message</strong></td>";
echo "<td width=50 align='right' bgcolor=" . $adHeading . "><a href='sqs.php'><img src='images/icon_refresh.png' border='0'></a></td>";
echo "</tr>";

for ($j = 0; $j < $rows; ++$j)
  {

    // Get Message
    $response = $sqs->receive_message('https://sqs.us-east-1.amazonaws.com/199992002821/SomeQueueSQS', array(
  'VisibilityTimeout' => 30
));
$body = $response->body->ReceiveMessageResult->Message[0]->Body;
$rcpt_hand=($response->body->ReceiveMessageResult->Message[0]->ReceiptHandle);

    $id = $j + 1;

    echo "<tr>";
    echo "<td valign=top bgcolor=" . $bgcolor . ">$id</td>";
    echo "<td valign=top bgcolor=" . $bgcolor . ">$body</td>";
    echo "<td valign=top><a href=sqsdelete.php?sid=$rcpt_hand><img   src=images/icon_delete.gif border=0 width=18 height=18></a></td>";
    echo "</tr>";

  }

echo "</table>";
?>

Вот код удаления:

<?php

if ($response = $sqs->delete_message('https://sqs.us-east-1.amazonaws.com/199992002821/SomeQueueSQS', $rcpt_hand)) {
  echo "Message deleted<br>";
} else {
  echo "Message not deleted<br>";
}

// Get list of unprocessed and valid messages
$rows = $sqs->get_queue_size('https://sqs.us-east-1.amazonaws.com/199992002821/SomeQueueSQS');

echo "<table>";
etc...

Спасибо

Андре


person andrebruton    schedule 31.08.2012    source источник


Ответы (1)


Условие if() в вашем коде удаления неверно. Ваше условие всегда возвращает значение true.

Вам нужно сделать запрос, а затем проверить, является ли $response->isOK() true или false. Если запрос был выполнен успешно, AWS вернет код состояния 2xx, а метод isOK() вернет true.

Если вы внесете это изменение и начнете видеть сбои, используйте print_r($response->body) для просмотра сообщения об ошибке, которое SQS отправляет обратно. Это должно помочь вам отладить.

person Ryan Parman    schedule 05.10.2012