すべてのプロダクト
Search
ドキュメントセンター

:キューの管理

最終更新日:Mar 14, 2025

この記事では、PHP 用 SDK を使用してキューの作成、メッセージの送信、メッセージの受信と削除、およびキューの削除を行う方法について説明します。

手順 1: 環境を準備する

  1. CreateQueueAndSendMessage.php ファイルをダウンロードします。
  2. CreateQueueAndSendMessage.php ファイルを開き、ファイルの末尾に AccessKey ID、AccessKey Secret、およびエンドポイントを指定します。
    • AccessKey ID と AccessKey Secret
      • Alibaba Cloud で API オペレーションを呼び出すために使用される AccessKey ペアです。
      • Alibaba Cloud アカウントを使用している場合は、Alibaba Cloud 管理コンソールの アクセスキーの管理 ページに移動して、AccessKey ペアを作成および表示します。
      • Resource Access Management (RAM) ユーザーの場合は、RAM コンソール にログオンして、AccessKey ペアを表示します。
    • エンドポイント
      • メッセージサービス(Simple Message Queue (旧称 MNS))にアクセスするために使用されるエンドポイントです。MNS のエンドポイントを表示するには、MNS コンソール にログオンします。詳細については、「キューのエンドポイントを表示する」をご参照ください。
      • MNS のエンドポイントはリージョンによって異なります。
  3. CreateQueueAndSendMessage.php ファイルに含まれている次のコードを使用して、SDK を設定します。
    // SDK のオートロードファイルを含めます。
    require __DIR__ . '/vendor/autoload.php';
    
    // 必要な PHP クラスを宣言します。
    use AliyunMNS\Client;
    use AliyunMNS\Requests\SendMessageRequest;
    use AliyunMNS\Requests\CreateQueueRequest;
    use AliyunMNS\Exception\MnsException;

手順 2: キューを作成する

使用できるキューがない場合は、キューを作成する必要があります。新しいキューのデフォルト名は CreateQueueAndSendMessageExample です。別のキュー名を指定することもできます。

// 1.クライアントを初期化します。
$this->client = new Client($this->endPoint, $this->accessId, $this->accessKey);

// 2.キューを作成するリクエストを生成します。キューのパラメーターを指定できます。
// キューのパラメーターの詳細については、「Queue」を参照してください。
$request = new CreateQueueRequest($queueName);
try
{
        $res = $this->client->createQueue($request);
        // 3.キューが作成されます。
        echo "QueueCreated! \n";
}
catch (MnsException $e)
{
        // 4.ネットワークエラーが発生した場合、またはキュー名が既に存在する場合は、キューの作成に失敗する可能性があります。CatchException オペレーションを呼び出して、障害を特定し、解決できます。
         echo "CreateQueueFailed: " . $e;
         return;
}            

手順 3: メッセージを送信する

キューが作成されたら、キューにメッセージを送信します。

// 1.キューを取得します。
// デフォルトでは、PHP 用 SDK は、送信されたメッセージに対して Base64 エンコードを実行し、受信したメッセージに対して Base64 デコードを実行します。
// SDK に上記の操作を実行させたくない場合は、getQueueRef() メソッドを呼び出すときに Base64 パラメーターを FALSE に設定できます: $queue = $this->client->getQueueRef($queueName, FALSE)。
$queue = $this->client->getQueueRef($queueName);

$messageBody = "test";
// 2.メッセージを送信するリクエストを生成します。
// メッセージの DelaySeconds パラメーターと Priority パラメーターを指定できます。
// メッセージのパラメーターの詳細については、「QueueMessage」を参照してください。
$bodyMD5 = md5(base64_encode($messageBody));
$request = new SendMessageRequest($messageBody);
try
{
        $res = $queue->sendMessage($request)
        // 3.メッセージが送信されます。
        echo "MessageSent! \n";
}
catch (MnsException $e)
{
        // 4.ネットワークエラーが発生した場合、またはメッセージのサイズが大きすぎる場合は、メッセージの送信に失敗する可能性があります。原因を調べて問題を解決できます。
        echo "SendMessage Failed: " . $e;
        return;
}            

手順 4: メッセージを受信して削除する

メッセージが送信されたら、キューからメッセージを受信できます。

NextVisibleTime は、Simple Message Queue (旧称 MNS) のメッセージの重要なパラメーターです。詳細については、「QueueMessage」をご参照ください。

$receiptHandle = NULL;
try
{
        // 1.receiveMessage() 関数を呼び出します。
        // receiveMessage() 関数を呼び出すときは、WaitSeconds パラメーターを 30 に設定することをお勧めします。
        // WaitSeconds パラメーターをゼロ以外の値に設定すると、メッセージを受信するリクエストは HTTP ロングポーリングリクエストになります。メッセージがキューに送信された場合、またはリクエストがタイムアウトした場合にのみ、レスポンスが返されます。WaitSeconds パラメーターの最大値は 30 です。
        $res = $queue->receiveMessage(30);
        echo "ReceiveMessage Succeed! \n";
        if (strtoupper($bodyMD5) == $res->getMessageBodyMD5())
        {
             echo "You got the message sent by yourself! \n";
        }
        // 2.ReceiptHandle パラメーターの値を取得します。メッセージの受信ハンドルには有効期限があり、メッセージの変更または削除に使用できます。詳細については、「QueueMessage」を参照してください。
        $receiptHandle = $res->getReceiptHandle();
}
catch (MnsException $e)
{
        // 3.エラーが発生した場合、メッセージの受信に失敗する可能性があります。原因を調べて問題を解決できます。
        echo "ReceiveMessage Failed: " . $e;
        return;
}

// ビジネス要件に基づいてメッセージを処理する独自のロジックを指定します。
// VisibilityTimeout パラメーターは、クライアントによって消費された後、メッセージがキューで非アクティブなままになる期間を指定します。指定された期間が経過すると、メッセージは再びアクティブになり、他のクライアントによって消費される可能性があります。プログラムが失敗したり、スタックしたりしても、メッセージは失われません。

// 4.メッセージが消費されたら、キューからメッセージを削除できます。
try
{
        // 5.deleteMessage() 関数を呼び出します。
        $res = $queue->deleteMessage($receiptHandle);
        echo "DeleteMessage Succeed! \n";
}
catch (MnsException $e)
{
        // 6.エラーが発生した場合は、CatchException オペレーションを呼び出して、障害を特定し、解決できます。
        // 受信ハンドルが期限切れになると、MessageNotExist エラーが返されます。このエラーは、受信ハンドルを使用して対応するメッセージを見つけることができないことを示しています。
        // 受信ハンドルの有効期限が切れる前にメッセージを確実に消費できるようにするには、VisibilityTimeout パラメーターを適切な値に設定する必要があります。changeMessageVisibility() 関数を呼び出して、VisibilityTimeout パラメーターの値を変更できます。
        echo "DeleteMessage Failed: " . $e;
        return;
}            

手順 5: キューを削除する

次のサンプルコードを使用して、キューを削除できます。

try {
        $this->client->deleteQueue($queueName);
        echo "DeleteQueue Succeed! \n";
} catch (MnsException $e) {
        echo "DeleteQueue Failed: " . $e;
        return;
}