protected function deleteMessageBatch($msgs) { $entries = []; /** @var SqsReceivedMessage $bmsg */ foreach ($msgs as $idx => $bmsg) { $entries[] = ["Id" => "buf_{$idx}", "ReceiptHandle" => $bmsg->getReceiptHandle()]; } $result = $this->client->deleteMessageBatch(["QueueUrl" => $this->getQueueUrl(), "Entries" => $entries]); if ($result['Failed']) { foreach ($result['Failed'] as $failed) { mwarning(sprintf("Deleting message failed, code = %s, id = %s, msg = %s, senderfault = %s", $failed['Code'], $failed['Id'], $failed['Message'], $failed['SenderFault'])); } throw new \RuntimeException("Cannot delete some messages, consult log for more info!"); } }
/** * {@inheritDoc} */ public function batchDelete(array $jobs) { // SQS can only handle up to 10 jobs, so if we have more jobs, we handle them in slices if (count($jobs) > 10) { do { $splicedJobs = array_splice($jobs, 0, 10); $this->batchDelete($splicedJobs); } while (count($splicedJobs) >= 10); return; } // SQS throws an exception if no jobs are inserted, which can happen due to the slicing method if (empty($jobs)) { return; } $parameters = array('QueueUrl' => $this->queueOptions->getQueueUrl(), 'Entries' => array()); /** @var $job JobInterface */ foreach ($jobs as $key => $job) { $jobParameters = array('Id' => $key, 'ReceiptHandle' => $job->getMetadata('receiptHandle')); $parameters['Entries'][] = $jobParameters; } $this->sqsClient->deleteMessageBatch($parameters); }
public function receiveMessages($queueUrl, $maximalMessages = 1) { if ($maximalMessages > 10) { throw new Exception('Messagenumber should be not more than 10'); } $result = $this->service->receiveMessage(array('QueueUrl' => $queueUrl, 'MaxNumberOfMessages' => $maximalMessages)); $returnMessages = array(); $resultMessages = $result->getPath('Messages/*/Body'); if ($resultMessages != null) { foreach ($resultMessages as $messageBody) { // Do something with the message //echo $messageBody; $returnMessages[] = $messageBody; } $entrys = array(); $i = 0; foreach ($result->getPath('Messages/*/ReceiptHandle') as $receiptHandle) { $entrys[] = array('Id' => $i, 'ReceiptHandle' => $receiptHandle); $i++; } $result = $this->service->deleteMessageBatch(array('QueueUrl' => $queueUrl, 'Entries' => $entrys)); } return $returnMessages; }