この記事では、PHP 用 SDK を使用してキューの作成、メッセージの送信、メッセージの受信と削除、およびキューの削除を行う方法について説明します。
手順 1: 環境を準備する
- CreateQueueAndSendMessage.php ファイルをダウンロードします。
- CreateQueueAndSendMessage.php ファイルを開き、ファイルの末尾に AccessKey ID、AccessKey Secret、およびエンドポイントを指定します。
- AccessKey ID と AccessKey Secret
- エンドポイント
- メッセージサービス(Simple Message Queue (旧称 MNS))にアクセスするために使用されるエンドポイントです。MNS のエンドポイントを表示するには、MNS コンソール にログオンします。詳細については、「キューのエンドポイントを表示する」をご参照ください。
- MNS のエンドポイントはリージョンによって異なります。
- 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;
}