diff --git a/Service/BaseQueue.php b/Service/BaseQueue.php index a4b62a0..a32febf 100644 --- a/Service/BaseQueue.php +++ b/Service/BaseQueue.php @@ -4,6 +4,7 @@ use Aws\Exception\AwsException; use Aws\Sqs\SqsClient; +use TriTran\SqsQueueBundle\Service\MessageCollection; use TriTran\SqsQueueBundle\Service\Worker\AbstractWorker; /** @@ -94,6 +95,41 @@ public function sendMessage(Message $message, int $delay = 0) return $messageId; } + /** + * @param MessageCollection $messages + * @param int $delay + * + * @return mixed|null + */ + public function sendMessageBatch(MessageCollection $messages, int $delay = 0) + { + $params = [ + 'Entries' => [], + 'QueueUrl' => $this->queueUrl + ]; + $messages->rewind(); + while ($messages->valid()) { + /** @var Message $message */ + $message = $messages->current(); + $params['Entries'][] = [ + 'DelaySeconds' => $delay, + 'Id' => $message->getId(), + 'MessageAttributes' => $message->getAttributes(), + 'MessageBody' => $message->getBody() + ]; + + $messages->next(); + } + + try { + $result = $this->client->sendMessageBatch($params); + } catch (AwsException $e) { + throw new \InvalidArgumentException($e->getAwsErrorMessage()); + } + + return $result; + } + /** * Retrieves one or more messages (up to 10), from the specified queue. * diff --git a/Service/Message.php b/Service/Message.php index 7145e5d..7db1983 100644 --- a/Service/Message.php +++ b/Service/Message.php @@ -38,6 +38,7 @@ public function __construct(string $body = '', array $attributes = []) { $this->body = $body; $this->attributes = $attributes; + $this->id = uniqid('message_'); } /**