103: 可視性タイムアウトを確認する
Queueでは、取得しただけではメッセージは削除されません。可視性タイムアウトとreceipt更新の関係を確認します。
所要時間 : 約25分
前提条件 : 102章まで完了し、queue-tutorial-basicとCloud Shellを利用できること
目次:
キュー詳細のメッセージの送信から{"event":"visibility-test"}を送信します。送信成功を確認してから次へ進みます。
- Cloud Shellで可視性を60秒に指定して取得します。
oci queue messages get-messages \
--endpoint "$QUEUE_ENDPOINT" \
--queue-id "$QUEUE_ID" \
--limit 1 \
--visibility-in-seconds 60 \
--timeout-in-seconds 0
- 期待結果:
deliveryCountとreceiptを含む1件が返ります。 - 失敗時確認: 対象メッセージが既に取得中または削除済みでないかを確認します。
- receiptを使わず直ちに再取得します。
- 期待結果: 60秒以内は同じメッセージが返りません。
- 60秒経過後に再取得します。
- 期待結果: 同じcontentが新しいreceiptで返り、配信回数が増えます。
- 必要に応じて
update-messageへ--endpoint "$QUEUE_ENDPOINT"を付けて可視性を延長し、最後に同じエンドポイントと最新receiptでメッセージを削除します。実行時の正確なオプションはoci queue messages update-message --helpで確認します。
削除コマンドの成功表示
delete-message --forceの成功時は応答本文がなく、エラーを表示せずにプロンプトへ戻ります。
<出力なし>
再取得して対象メッセージが返らないことを確認します。
確認する出力
messagesが[]であれば削除完了です。次の出力例を確認基準とします。
{
"data": {
"messages": []
}
}
取得のたびに配信回数が増えるため、DLQ検証用でないキューを何度もポーリングしないでください。
- すぐ再取得できた場合は
visibility-in-secondsと経過時間を確認します。 - 削除が失敗した場合は古いreceiptでないか確認します。
- メッセージがDLQへ移動した場合は、過剰なポーリングで最大試行回数を超えていないか確認します。
検証メッセージを最新receiptで削除します。キューは後続章のため保持します。
参考: キューからのメッセージの使用