Пример использования Yandex Message Queue на PHP

С помощью AWS SDK для PHP можно управлять очередями сообщений в Message Queue, отправлять и принимать сообщения.

Установка

Установите AWS SDK для PHP по инструкции на официальном сайте.

Подготовка к работе

  1. Создайте сервисный аккаунт.
  2. Назначьте роль editor сервисному аккаунту.
  3. Создайте статический ключ доступа.

Задайте переменные окружения:

$ export AWS_ACCESS_KEY_ID="<идентификатор ключа доступа>"
$ export AWS_SECRET_ACCESS_KEY="<секретный ключ>"

Пример

В этом примере:

  1. Устанавливается соединение с Message Queue.
  2. Создается очередь сообщений c именем ymq_php_sdk_example.
  3. В очередь передается сообщение с текстом Test message.
  4. Сообщение считывается из очереди и отображается в терминале.
  5. Удаляется созданная очередь сообщений.
<?php

require 'vendor/autoload.php';

use Aws\SQS\SQSClient;
use Aws\Exception\AwsException;

$ymq = new Aws\SQS\SQSClient([
    'version' => 'latest',
    'region' => 'ru-central1',
    'endpoint' => 'https://message-queue.api.cloud.yandex.net',
]);

$result = $ymq->createQueue([
    'QueueName' => 'ymq_php_sdk_example',
]);

$queueUrl = $result["QueueUrl"];
print('Queue created, URL: ' . $queueUrl . PHP_EOL);

$result = $ymq->sendMessage([
    'QueueUrl' => $queueUrl,
    'MessageBody' => 'Test message',
]);

print("Message sent, ID: " . $result["MessageId"] . PHP_EOL);

$result = $ymq->receiveMessage([
    'QueueUrl' => $queueUrl,
    'WaitTimeSeconds' => 10,
]);

foreach ($result["Messages"] as $msg) {
    print('Message received:' . PHP_EOL);
    print('ID: ' . $msg['MessageId'] . PHP_EOL);
    print('Body: ' . $msg['Body'] . PHP_EOL);

    $ymq->deleteMessage([
        'QueueUrl' => $queueUrl,
        'ReceiptHandle' => $msg['ReceiptHandle'],
    ]);
}

$result = $ymq->deleteQueue([
    'QueueUrl' => $queueUrl,
]);

print('Queue deleted' . PHP_EOL);