SimpleMQ API: キューを作成してメッセージを送受信する
シンプルMQは、キューを介してソフトウェア間でメッセージを送受信するマネージド型のメッセージキューサービスです。このチュートリアルでは、キューを作成し、メッセージを送信・受信して処理済みメッセージを削除します(シンプルMQの基本情報)。
[!WARNING] この手順では、現在選択されているアカウントにキューを作成し、メッセージを送受信して削除します。キュー管理には「作成・削除」アクセスレベルを持つ API キーが必要です。実行前に
skr config currentで対象プロファイルを確認し、既存キューと重複しない名前を使用してください。キューの設定変更や削除は、手順で作成したキューだけに行ってください。
前提条件
skr simplemq-apiが利用でき、SDK のプロファイルまたはSAKURA_ACCESS_TOKENとSAKURA_ACCESS_TOKEN_SECRETが設定されていること。- キューを管理する API キーに「作成・削除」のアクセスレベルがあること(SimpleMQ API 利用の基本手順)。
- API キー出力をキューファイルに保存するため、
jqが利用できること。 - この例ではキュー名
simplemq-tutorial-UNIQUE-SUFFIXと説明simplemq-tutorial/UNIQUE-SUFFIXを使います。UNIQUE-SUFFIXは英数字とハイフンで構成する未使用の値に置き換えてください。
SimpleMQ のキューはゾーンを指定せずに操作するグローバルリソースです。キュー名は同じプロジェクト内で一意である必要があり、作成後に変更できません(コントロールパネルでの操作)。
作成するリソース
この手順では、専用の SimpleMQ キューを1つ作成します。メッセージ操作にはキュー名と、そのキュー用の API キーを使います。キュー管理 API が返すリソース ID と、メッセージ API に渡すキュー名は異なる値です。
Step 1: 対象プロファイルとコマンドを確認する
$ skr config current
$ skr simplemq-api --help
$ skr simplemq-api queue --help
$ skr simplemq-api queue create --help
$ skr simplemq-api queue config --help
$ skr simplemq-api queue rotate-api-key --help
$ skr simplemq-api message send --help
$ skr simplemq-api message receive --help
$ skr simplemq-api message extend-timeout --help
$ skr simplemq-api message delete --help
config current が対象のプロファイル名であることを確認します。キュー管理 API は SDK のプロファイルまたは環境変数の認証情報を使います。メッセージ API はキューごとの API キーを必要とし、--api-key-file でファイルを指定できます。値をファイルから読み込むには --api-key-file - を使います。
Step 2: 専用キューを作成して設定する
次のコマンドでキューを作成します。作成結果の ID を控え、以降の QUEUE-ID に指定してください。QUEUE-NAME は同じプロジェクト内で未使用の名前に置き換えます。
$ skr simplemq-api queue create --name QUEUE-NAME --description simplemq-tutorial/UNIQUE-SUFFIX
$ skr simplemq-api queue list --query 'map({ID,Name})'
一覧から ID と名前だけを取り出して確認します。次は CLI テストで確認した出力形式の例で、ID とキュー名は置き換えています。ほかのキューがある場合は、同じ配列に含まれます。
[
{
"ID": "123456789012",
"Name": "QUEUE-NAME"
}
]
キューの可視性タイムアウトと未処理メッセージ保存期間を設定します。VisibilityTimeoutSeconds は5〜900秒、ExpireSeconds は60〜1209600秒です。どちらも必要なので、通常は対応する CLI フラグで指定します。
$ skr simplemq-api queue config QUEUE-ID --visibility-timeout-seconds 30 --expire-seconds 345600
$ skr simplemq-api queue read QUEUE-ID
Description、Tags、Icon も設定する場合は、ConfigQueueRequest の JSON を --request で指定します。個別フラグとは併用できません。
queue-settings.json:
{
"CommonServiceItem": {
"Settings": {
"VisibilityTimeoutSeconds": 30,
"ExpireSeconds": 345600
}
}
}
$ skr simplemq-api queue config QUEUE-ID --request @queue-settings.json
Step 3: API キーを用意してメッセージを送受信する
キューごとの API キーを発行します。再発行すると以前のキーは無効になるため、この手順で作成したキューだけを対象にしてください。キーはコマンドの出力に含まれるので、端末に表示せず、アクセス権を制限したファイルに保存します。
$ umask 077
$ skr simplemq-api queue rotate-api-key QUEUE-ID | jq -er .APIKey > simplemq.key
キュー名は QUEUE-NAME の値に置き換えます。メッセージ本文は API 定義に従い、最大256000文字で、英数字と +、/、= のみを使います。次の例では HelloSimpleMQ を送信します。
$ skr simplemq-api message send --queue-name QUEUE-NAME --api-key-file simplemq.key --content HelloSimpleMQ
$ skr simplemq-api message receive --queue-name QUEUE-NAME --api-key-file simplemq.key
送信結果の id と受信結果の id が一致し、受信結果の content が HelloSimpleMQ であることを確認してください。受信結果の id を続く操作の MESSAGE-ID に指定します。
受信リクエストはキュー内の古いメッセージから配信します。配信保証は At least once です。同じメッセージを複数回受信する場合があるため、アプリケーション側で重複を避ける設計にしてください(シンプルMQの基本情報)。
処理に可視性タイムアウトより長い時間がかかる場合は、受信したメッセージのタイムアウトを延長します。処理が終わったら、そのメッセージを削除します。
$ skr simplemq-api message extend-timeout --queue-name QUEUE-NAME --api-key-file simplemq.key MESSAGE-ID
$ skr simplemq-api message delete --queue-name QUEUE-NAME --api-key-file simplemq.key MESSAGE-ID
$ skr simplemq-api queue count-messages QUEUE-ID
この例では作成直後のキューに送信したメッセージを削除するため、count-messages の Count が0であることを確認できます。
extend-timeout の出力では、同じメッセージ id が返り、visibility_timeout_at の値が受信時より増えていることも確認できます。
Step 4: 作成したキューを削除する
削除前に queue read で ID、名前、説明がこの手順で作成したキューと一致することを確認します。続けてキュー内のメッセージを消去し、キューを削除します。既存のキューは削除しないでください。
$ skr simplemq-api queue read QUEUE-ID
$ skr simplemq-api queue clear-messages QUEUE-ID
$ skr simplemq-api queue delete QUEUE-ID
$ skr simplemq-api queue list --query 'map({ID,Name})'
$ rm simplemq.key
queue list に対象キューが残っていないことを確認します。削除後に結果が空の場合の出力は次のとおりです。
[]
API キーを別の場所に保存した場合は、そのファイルもこの手順で作成したものだけを削除してください。