メッセージ管理でのSTOMPの使用
STOMPメッセージ・プロトコルを使用して、キューのメッセージを公開、消費、管理します。
概要
STOMPは、認証がリクエストごとに1回ではなく、接続ごとに1回行われるため、生成と消費の効率を高めることができるオープン・メッセージング・プロトコルです。キュー・サービスでは、STOMP仕様1.0、1.1および1.2がサポートされています。STOMPとRESTの両方を使用して、同じキューに公開して消費できます。
キューによるSTOMPのサポート方法の詳細は、次の項を参照してください。
キューはカスタム・ヘッダーまたはトランザクション(STOMPフレーム
BEGIN/COMMIT/ABORT
)をサポートしていません。BEGIN/COMMIT/ABORT
が使用されている場合、キューはERROR
フレームを返し、接続を終了します。接続および認証
クライアントは、CONNECT
またはSTOMP
フレームを使用して、ポート61613のメッセージ・エンドポイント上のキュー・サービスに接続できます。キューのメッセージ・エンドポイントを検索する詳細な手順は、メッセージ・エンドポイントを参照してください。
STOMPプロトコルでの認証には、認証トークンを使用します。認証トークンはbase64でエンコードされている必要があります。コンソールのユーザー詳細ページでトークンを生成できます。詳細は、認証トークンの操作を参照してください。
SEND
SEND
フレームを使用してメッセージを生成します。SEND
フレームには、次のヘッダーを含めることができます:
-
destination
: (必須)メッセージの公開先のキューのOCID (Oracle Cloud Identifier)。オプションで、指定したチャネルに公開するチャネルIDを含めることができます。たとえば:<queue_OCID>/<channel_ID>
receipt
: (オプション)SEND
フレームにreceipt
ヘッダーが含まれている場合、キューは公開が成功するとクライアントにRECEIPT
フレームを送信し、エラーの場合はERROR
フレームを送信します。ノート
receipt
ヘッダーがない場合、キュー・サービスはRECEIPT
フレームを送信しませんが、エラー時にはERROR
フレームを送信する場合があります。
transaction
ヘッダーおよびカスタム・ヘッダーはサポートされていません。サポートされていないヘッダーが含まれている場合、キューはERROR
フレームを送信し、接続を終了します。
SUBSCRIBE
SUBSCRIBE
フレームを使用してメッセージを消費します。SUBSCRIBE
フレームは、長いポーリングGetMessages
リクエストと等しくなります。サブスクライブされた宛先で受信されたメッセージは、キューからMESSAGE
フレームとしてクライアントに配信されます。SUBSCRIBE
フレームには、次のヘッダーを含めることができます:
-
destination
: (必須)メッセージの消費元のキューのOCID (Oracle Cloud Identifier)。オプションで、指定したチャネルまたはチャネルから消費するチャネル・フィルタを含めることができます。たとえば:<queue_OCID>/<channel_ID_filter>
id
: (必須)サブスクリプションを識別します。メッセージの消費を停止するには、UNSUBSCRIBE
フレームでクライアントによって同じIDが渡される必要があります。ack
: (必須)client-individual
値のみがサポートされています。つまり、ACK
フレームでは、以前に配信されたすべてのメッセージではなく、ACK
フレームで指定されたメッセージのみが削除されます。visibility
: (オプション)消費されたメッセージがリクエストを行うクライアントに対して表示される時間の長さ。ヘッダーを省略すると、キュー・サービスはキューのデフォルトの表示タイムアウトを使用します。
エラーの場合、キュー・サービスはERROR
フレームを返し、接続を終了します。
UNSUBSCRIBE
UNSUBSCRIBE
フレームを使用して、STOMPクライアントがキューからのメッセージの受信を停止するようにします。フレームに次のヘッダーを追加します。
id
: (必須)停止するサブスクリプションを識別します。このIDは、対応するSUBSCRIBE
フレームで使用されました。
ACK/NACK
ACK
フレームを使用して、メッセージを受信して処理した後に削除します。ACK
フレームでは、id
ヘッダーで識別されるメッセージのみが削除されます。
NACK
フレームを使用して、メッセージが正常に処理されなかったことをキューに通知します。NACK
フレームを使用すると、メッセージの表示が更新され、他のコンシューマにすぐに表示されます。
プロトコルのバージョンに応じて、両方のフレームが次のヘッダーを受け入れます:
ID
: (STOMP v1.2に必須)削除または更新するメッセージのID。message-id
: (STOMP v1.1または1.0に必須)削除または更新するメッセージのID。
MESSAGE
MESSAGE
フレームは、サブスクリプションからSTOMPクライアントにメッセージを伝えます。MESSAGE
フレームには、次のヘッダーが含まれます:
message-id
:- STOMP v1.2の場合: メッセージの一意の内部識別子。デバッグの目的にのみ使用します。
- STOMP v1.1およびv1.0の場合:
ACK
およびNACK
フレームで使用するメッセージのreceipt。
subscription
:SUBSCRIBE
フレームで使用されるID。destination
: メッセージを含むキューのOCID (Oracle Cloud Identifier)と、指定したチャネルに公開するオプションのチャネルID。たとえば:<queue_OCID>/<channel_ID>
ack
: STOMP v.1.2の場合のみ、メッセージのreceipt。content-type
: ペイロードのタイプ(この場合はplain/text
)。content-length
: ペイロードまたはメッセージの長さ。expire-after
: メッセージの有効期限(ミリ秒/Epoch以降)。visible-after
: メッセージ表示時間(ミリ秒/Epoch以降)。delivery-count
: このメッセージが配信された回数oci-message-id
: 内部メッセージID。
MESSAGE
フレームには、メッセージのペイロードがフレームの本文として含まれます。
RECEIPT
キュー・サービスは、receiptをリクエストしたSEND
フレームをサービスが正常に処理した後、STOMPクライアントにRECEIPT
フレームを送信します。RECEIPT
フレームには、SEND
フレームのreceiptヘッダーに一致する値を持つreceipt-id
ヘッダーが含まれます。
RECEIPT
フレームは、対応するクライアント・フレームがサーバーによって処理されたという確認応答です。STOMPはストリームベースであるため、受信は以前のすべてのフレームがサーバーによって受信されたという累積確認応答でもあります。ただし、これらの以前のフレームはまだ完全には処理されていない可能性があります。クライアントが切断した場合、以前に受信したフレームは引き続きサーバーによって処理されます。
DISCONNECT
DISCONNECT
フレームを使用して切断(キュー・サービスへの接続を終了)します。接続に関連付けられているすべてのサブスクリプションが停止されます。フレームには、次のヘッダーを含めることができます:
receipt
: (オプション)キューは、receipt
ヘッダーを含む以前のすべてのフレームが正常に処理された後に、STOMPクライアントにRECEIPT
フレームを送信します。正常な切断には、receipt
ヘッダーを使用します。
ERROR
キューは、何か問題が発生した場合に、ERROR
フレームを送信することがあります。ERROR
フレームを送信した後、キューは接続を終了します。ERROR
フレームには、次のヘッダーを含めることができます:
message
: エラーの概略。本文にはより詳細な情報が含まれています。receipt-id
: エラーの原因となったフレームにreceipt
ヘッダーが含まれていた場合のreceipt
ヘッダーの値。content-type
: 本文にエラー・メッセージの詳細が含まれる場合のペイロードのタイプ。content-length
: ペイロードの長さまたはエラー・メッセージの詳細。
ERROR
フレーム本文には、エラーに関する詳細情報が含まれています。