예제 #1
1
 /**
  * Process a single message and push it to the server URL
  *
  * @link   http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html
  * @param  array           $message
  * @param  string          $uri
  * @param  string          $queueName
  * @param  string          $queueUrl
  * @param  OutputInterface $output
  * @return void
  */
 private function processMessage(array $message, string $uri, string $queueName, string $queueUrl, OutputInterface $output)
 {
     $response = $this->httpClient->post($uri, ['headers' => ['User-Agent' => 'aws-sqsd/2.0', 'Content-Type' => 'application/json', 'X-Aws-Sqsd-Msgid' => $message['MessageId'], 'X-Aws-Sqsd-Queue' => $queueName, 'X-Aws-Sqsd-First-Received-At' => $message['Attributes']['ApproximateFirstReceiveTimestamp'], 'X-Aws-Sqsd-Receive-Count' => $message['Attributes']['ApproximateReceiveCount'], 'X-Aws-Sqsd-Sender-Id' => $message['Attributes']['SenderId']], 'json' => json_decode($message['Body'], true)]);
     if ($response->getStatusCode() === 200) {
         $this->sqsClient->deleteMessage(['QueueUrl' => $queueUrl, 'ReceiptHandle' => $message['ReceiptHandle']]);
         $output->writeln(sprintf('<info>Message "%s" has been processed and deleted from the queue "%s".</info>', $message['MessageId'], $queueName));
     } else {
         $output->writeln(sprintf('<error>Message "%s" could not be processed and back-end returned error %s. Reason: %s</error>', $message['MessageId'], $response->getStatusCode(), $response->getBody()));
     }
 }
예제 #2
0
 /**
  * {@inheritDoc}
  */
 public function delete(MessageInterface $message)
 {
     if (null === $message->getAttribute('ReceiptHandle')) {
         throw new QueueException('Message does not contain ReceiptHandle');
     }
     $result = $this->client->deleteMessage(array('ReceiptHandle' => $message->getAttribute('ReceiptHandle'), 'QueueUrl' => $this->queueUrl));
 }
예제 #3
0
 /**
  * @inheritDoc
  */
 public function ack($queueName, Envelope $envelope)
 {
     if (!$envelope instanceof SqsEnvelope) {
         throw new InvalidEnvelope(sprintf('%s requires that envelopes be instances of "%s", got "%s"', __CLASS__, SqsEnvelope::class, get_class($envelope)));
     }
     $queueUrl = $this->getQueueUrl($queueName);
     $this->client->deleteMessage(['QueueUrl' => $queueUrl, 'ReceiptHandle' => $envelope->getReceiptHandle()]);
 }
예제 #4
0
 /**
  * @inheritdoc
  *
  * @throws \InvalidArgumentException
  * @throws InvalidMessageException
  * @throws QueueAccessException
  */
 public function deleteMessage($queueName, $message)
 {
     if (empty($queueName)) {
         throw new \InvalidArgumentException('Queue name empty or not defined.');
     }
     if (empty($message)) {
         throw new InvalidMessageException($message, 'Message empty or not defined.');
     }
     if (!is_array($message)) {
         throw new InvalidMessageException($message, 'Message must be an array.');
     }
     if (!isset($message['ReceiptHandle'])) {
         throw new InvalidMessageException($message, 'ReceiptHandle not found in message.');
     }
     if (!isset($message['priority'])) {
         throw new InvalidMessageException($message, 'Priority not found in message.');
     }
     $priority = $this->priorityHandler->getPriorityByLevel($message['priority']);
     try {
         $queueUrl = $this->sqsClient->getQueueUrl(['QueueName' => $this->getQueueNameWithPrioritySuffix($queueName, $priority)])->get('QueueUrl');
         $this->sqsClient->deleteMessage(['QueueUrl' => $queueUrl, 'ReceiptHandle' => $message['ReceiptHandle']]);
     } catch (SqsException $e) {
         throw new QueueAccessException('Cannot delete message from queue.', 0, $e);
     }
     return $this;
 }
예제 #5
0
파일: SqsQueue.php 프로젝트: ronan-gloo/qu
 /**
  * Remove permanently a particular message from the queue
  *
  * @param MessageInterface $message
  * @throws \Qu\Exception\OperationException
  * @return void
  */
 public function remove(MessageInterface $message)
 {
     try {
         $this->client->deleteMessage(['QueueUrl' => $this->getUrl(), 'ReceiptHandle' => $message->getMetadata(static::RECEIPT_HANDLE_KEY)]);
     } catch (\Exception $e) {
         throw new OperationException($e->getMessage(), 0, $e);
     }
     $message->setMetadata(static::RECEIPT_HANDLE_KEY, null);
 }
예제 #6
0
 /**
  * Delete the job from the queue.
  *
  * @param Job $job The job to be deleted.
  *
  * @return boolean whether the operation succeed.
  */
 public function deleteJob(Job $job)
 {
     if (!empty($job->header['ReceiptHandle'])) {
         $receiptHandle = $job->header['ReceiptHandle'];
         $response = $this->_client->deleteMessage(['QueueUrl' => $this->url, 'ReceiptHandle' => $receiptHandle]);
         return $response !== null;
     } else {
         return false;
     }
 }
예제 #7
0
 /**
  * {@inheritDoc}
  *
  * @return bool
  */
 public function delete($id)
 {
     if (!$this->queueExists()) {
         return false;
     }
     $this->sqs->deleteMessage(['QueueUrl' => $this->queueUrl, 'ReceiptHandle' => $id]);
     $context = ['QueueUrl' => $this->queueUrl, 'ReceiptHandle' => $id];
     $this->log(200, "Message deleted from SQS Queue", $context);
     return true;
 }
예제 #8
0
 /**
  * Deletes a message from the queue
  *
  * @param Message $message
  * @return bool  returns true if successful, false otherwise
  */
 public function delete(Message $message)
 {
     try {
         // Delete the message
         $this->sqs_client->deleteMessage(array('QueueUrl' => $this->url, 'ReceiptHandle' => $message->receipt_handle));
         return true;
     } catch (Exception $e) {
         echo 'Error deleting message from queue ' . $e->getMessage();
         return false;
     }
 }
 /**
  * @param mixed[] $args
  * @return Result
  * @throws ExceptionInterface
  */
 private function deleteSqsMessage(array $args = [])
 {
     if (array_key_exists('ReceiptHandle', $args) && $this->configuration->getDeleteFromS3()) {
         // Split receipt handle into S3 and SQS information.
         $decodedReceiptHandle = json_decode($args['ReceiptHandle'], true);
         if (json_last_error() === JSON_ERROR_NONE) {
             $s3Client = $this->configuration->getS3Client();
             // Delete from S3.
             $s3Client->deleteObject(array('Bucket' => $decodedReceiptHandle['s3_bucket_name'], 'Key' => $decodedReceiptHandle['s3_key']));
             // Adjust SQS args.
             $args['ReceiptHandle'] = $decodedReceiptHandle['original_receipt_handle'];
         }
     }
     return $this->sqsClient->deleteMessage($args);
 }
예제 #10
0
 /**
  * {@inheritdoc}
  */
 public function wait(Closure $callback)
 {
     while (true) {
         $result = $this->client->receiveMessage(array('QueueUrl' => $this->queueUrl, 'WaitTimeSeconds' => 20));
         $messages = $result['Messages'];
         if ($messages) {
             foreach ($messages as $message) {
                 $hermesMessage = $this->serializer->unserialize($message['Body']);
                 $callback($hermesMessage);
                 $this->client->deleteMessage(array('QueueUrl' => $this->queueUrl, 'ReceiptHandle' => $message['ReceiptHandle']));
             }
         }
         if ($this->sleepInterval) {
             sleep($this->sleepInterval);
         }
     }
 }
예제 #11
0
 /**
  * @inheritdoc
  *
  * @throws SqsException
  */
 public function deleteMessage($queueName, $message)
 {
     if (empty($queueName)) {
         throw new InvalidArgumentException('Parameter queueName empty or not defined.');
     }
     if (empty($message)) {
         throw new InvalidArgumentException('Parameter message empty or not defined.');
     }
     if (!is_array($message)) {
         throw new InvalidArgumentException('message must be an array.');
     }
     if (!isset($message['ReceiptHandle'])) {
         throw new InvalidArgumentException('ReceiptHandle not found in message.');
     }
     if (!isset($message['priority'])) {
         throw new InvalidArgumentException('Priority not found in message.');
     }
     $queueUrl = $this->sqsClient->getQueueUrl(['QueueName' => $this->getQueueNameWithPrioritySuffix($queueName, $message['priority'])])->get('QueueUrl');
     $this->sqsClient->deleteMessage(['QueueUrl' => $queueUrl, 'ReceiptHandle' => $message['ReceiptHandle']]);
     return $this;
 }
예제 #12
0
 /**
  * {@inheritDoc}
  */
 public function delete(JobInterface $job)
 {
     $parameters = array('QueueUrl' => $this->queueOptions->getQueueUrl(), 'ReceiptHandle' => $job->getMetadata('receiptHandle'));
     $this->sqsClient->deleteMessage($parameters);
 }
예제 #13
0
 /**
  * {@inheritDoc}
  */
 public function completeMessage(QueueMessage $message)
 {
     $queueUrl = $this->getQueueUrl($message->getQueueId());
     $this->queueClient->deleteMessage(["QueueUrl" => $queueUrl, "ReceiptHandle" => $message->getReceiptId()]);
 }
require '../vendor/autoload.php';
use Aws\Sqs\SqsClient;
use Aws\S3\S3Client;
$s3 = new S3Client(['version' => S3_VERSION, 'region' => S3_REGION]);
$sqs = new SqsClient(['version' => SQS_VERSION, 'region' => SQS_REGION]);
$messageResult = $sqs->receiveMessage(array('QueueUrl' => SQS_OUTBOX, 'MaxNumberOfMessages' => 10, 'MessageAttributeNames' => array('s3path', 's3bucket', 'filename', 'smallfilename')));
$message = "";
if ($messageResult->getPath('Messages') != '') {
    foreach ($messageResult->getPath('Messages') as $messages) {
        $attr = array();
        $receiptHandle = $messages['ReceiptHandle'];
        foreach ($messages['MessageAttributes'] as $key => $value) {
            $attr[$key] = $value['StringValue'];
            $message = $attr['filename'] . " Resize Done.<br/>";
        }
        $sqs->deleteMessage(array('QueueUrl' => SQS_OUTBOX, 'ReceiptHandle' => $receiptHandle));
    }
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>AWS EC2 S3 SQS</title>
<script	src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script	src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet"
예제 #15
0
 public function deleteMessage(SqsReceivedMessage $msg)
 {
     $this->client->deleteMessage(["QueueUrl" => $this->getQueueUrl(), "ReceiptHandle" => $msg->getReceiptHandle()]);
 }
예제 #16
0
 /**
  * Acknowledge a job
  *
  * @access public
  * @param  Job $job
  * @return $this
  */
 public function completed(Job $job)
 {
     $this->sqsClient->deleteMessage(array('QueueUrl' => $this->sqsUrl, 'ReceiptHandle' => $job->getId()));
     return $this;
 }
예제 #17
0
파일: run.php 프로젝트: samkeen/kiln-php
/**
 * @param \Aws\Sqs\SqsClient $sqsClient
 * @param $queueUrl
 * @param $messageReceiptHandle
 * @param \Psr\Log\LoggerInterface $logger
 */
function deleteQueueMessage(\Aws\Sqs\SqsClient $sqsClient, $queueUrl, $messageReceiptHandle, \Psr\Log\LoggerInterface $logger)
{
    try {
        $logger->info("deleting message on queue '{$queueUrl}' using message receipt: '{$messageReceiptHandle}'.");
        $result = $sqsClient->deleteMessage(['QueueUrl' => $queueUrl, 'ReceiptHandle' => $messageReceiptHandle]);
    } catch (\Aws\Sqs\Exception\SqsException $e) {
        $logger->error("SqsException deleting message on queue '{$queueUrl}' using message receipt: " . "'{$messageReceiptHandle}'. Error: {$e->getMessage()}");
        shutDown("ERROR deleting message on queue '{$queueUrl}' using message receipt: '{$messageReceiptHandle}'." . "Error: {$e->getMessage()}");
    } catch (Exception $e) {
        $logger->error("Exception deleting message on queue '{$queueUrl}' using message receipt: " . "'{$messageReceiptHandle}'. Error: {$e->getMessage()}");
        shutDown("ERROR deleting message on queue '{$queueUrl}' using message receipt: '{$messageReceiptHandle}'." . "Error: {$e->getMessage()}");
    }
}
예제 #18
0
 /**
  * @param MessageInterface $message
  *
  * @return boolean
  */
 public function delete(MessageInterface $message)
 {
     return $this->client->deleteMessage(array('QueueUrl' => $this->getQueueUrl(), 'ReceiptHandle' => $message->getReceiptHandle()));
 }
예제 #19
0
 /**
  * Delete the job from the queue.
  *
  * @return void
  */
 public function delete()
 {
     $this->sqs->deleteMessage(array('QueueUrl' => $this->queue, 'ReceiptHandle' => $this->job['ReceiptHandle']));
 }
예제 #20
0
 public function deleteMessage(QueueMessage $message)
 {
     $this->client->deleteMessage(['QueueUrl' => $message->getQueueUrl(), 'ReceiptHandle' => $message->getReceiptHandle()]);
 }
예제 #21
0
 /**
  * @param MessageReceivedInterface $message
  * @param array $options
  * @see https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#deletemessage
  */
 public function deleteMessage(MessageReceivedInterface $message, array $options = [])
 {
     $params = $this->mergeParams([self::RECEIPT_HANDLE => $message->getReceptionRequestId()], $options);
     $this->awsSqsClient->deleteMessage($params);
 }
예제 #22
0
 /**
  * @inheritdoc
  */
 public function delete(array $message)
 {
     $this->sqs->deleteMessage(['QueueUrl' => $message['queue'], 'ReceiptHandle' => $message['receipt-handle']]);
 }
예제 #23
0
 /**
  * {@inheritdoc}
  */
 public function delete()
 {
     parent::delete();
     $this->sqs->deleteMessage(['QueueUrl' => $this->queue, 'ReceiptHandle' => $this->job['ReceiptHandle']]);
 }
예제 #24
0
 function it_deleteMessage_and_return_true_how_success(\Aws\Sqs\SqsClient $client)
 {
     $responseMock = unserialize(file_get_contents(__DIR__ . "/../../resources/deleteMessage"));
     $client->deleteMessage(["QueueUrl" => "queue", "ReceiptHandle" => "sehrh"])->willReturn($responseMock);
     $this->delete("sehrh", "queue")->shouldBe(true);
 }
예제 #25
0
 public function ack($identifier, $internals)
 {
     $this->client->deleteMessage(array('QueueUrl' => $this->queueUrl, 'ReceiptHandle' => $identifier));
 }
예제 #26
0
파일: SqsJob.php 프로젝트: Wandu/Q
 /**
  * {@inheritdoc}
  */
 public function delete()
 {
     return $this->client->deleteMessage(['QueueUrl' => $this->url, 'ReceiptHandle' => $this->handle]);
 }
예제 #27
-1
 /**
  * @see http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sqs-2012-11-05.html#receivemessage
  * Will throw an exception if $amount is > 10.000
  *
  * @param int $amount
  * @param int $timeout seconds
  * @return nothing
  */
 public function consume($amount, $timeout = 0)
 {
     $limit = $amount > 0 ? $amount : $this->requestBatchSize;
     if ($timeout > 0) {
         $startTime = time();
         $remaining = $timeout;
     }
     $receiveParams = array('QueueUrl' => $this->queueUrl, 'MaxNumberOfMessages' => $limit, 'AttributeNames' => array('All'), 'MessageAttributeNames' => array('All'));
     while (true) {
         $reqTime = microtime(true);
         if ($timeout > 0) {
             // according to the spec, this is maximum wait time. If messages are available sooner, they get delivered immediately
             $receiveParams['WaitTimeSeconds'] = $remaining;
         }
         $result = $this->client->receiveMessage($receiveParams);
         $messages = $result->get('Messages');
         if (is_array($messages)) {
             foreach ($messages as $message) {
                 // How we implement routing keys with SQS: since it is not supported natively, we check if the route
                 // matches after having downloaded the message. If it does not match, we just skip processing it.
                 // Since we will not call deleteMessage, SQS will requeue the message in a short time.
                 // This is far from optimal, but it might be better than nothing
                 if (!$this->matchRoutingKey($message)) {
                     continue;
                 }
                 // removing the message from the queue is manual with SQS
                 $this->client->deleteMessage(array('QueueUrl' => $this->queueUrl, 'ReceiptHandle' => $message['ReceiptHandle']));
                 $data = $message['Body'];
                 unset($message['Body']);
                 $contentType = isset($message['MessageAttributes'][$this->contentTypeAttribute]['StringValue']) ? $message['MessageAttributes'][$this->contentTypeAttribute]['StringValue'] : '';
                 if ($contentType != '') {
                     $this->callback->receive(new Message($data, $message, $contentType, $this->queueName));
                 } else {
                     if ($this->logger) {
                         $this->logger->warning('The SQS Consumer received a message with no content-type attribute. Assuming default');
                     }
                     $this->callback->receive(new Message($data, $message, null, $this->queueName));
                 }
             }
         }
         $this->maybeStopConsumer();
         if ($amount > 0) {
             return;
         }
         if ($timeout > 0 && ($remaining = $startTime + $timeout - time()) <= 0) {
             return;
         }
         /// @todo use a parameter to decide the polling interval
         // observe MAX 5 requests per sec per queue: sleep for 0.2 secs in between requests
         $passedMs = (microtime(true) - $reqTime) * 1000000;
         if ($passedMs < 200000) {
             usleep(200000 - $passedMs);
         }
     }
 }