Microsoft Azure Service Bus における AMQP 1.0: 要求/応答ベースの操作

この記事では、Microsoft Azure Service Bus の要求/応答ベースの操作の一覧を示します。 この情報は、AMQP Management Version 1.0 ワーキング ドラフトに基づいています。

OASIS AMQP 技術仕様に基づいて Service Bus が実装および構築される方法について説明している、詳細な回線レベルの AMQP 1.0 プロトコル ガイドについては、「Azure Service Bus と Event Hubs における AMQP 1.0 プロトコル ガイド」を参照してください。

概念

ServiceBusReceivedMessage / ServiceBusMessage

AMQP メッセージにマップされている Service Bus のメッセージを表します。 マッピングは、Service Bus AMQP プロトコル ガイドで定義されています。

エンティティ管理ノードへの接続

このドキュメントで説明するすべての操作は、要求/応答パターンに従います。操作のスコープはエンティティであり、エンティティ管理ノードに接続する必要があります。

要求を送信するために管理ノードへのリンクを作成します。

requestLink = session.attach(
role: SENDER,
   	target: { address: "<entity address>/$management" },
   	source: { address: ""<my request link unique address>" }
)

管理ノードからの応答を受信するためのリンクを作成します。

responseLink = session.attach(
role: RECEIVER,
	source: { address: "<entity address>/$management" }
   	target: { address: "<my response link unique address>" }
)

要求メッセージの転送

要求メッセージを転送します。
トランザクションをサポートする操作に対して、必要に応じてトランザクション状態を追加できます。

requestLink.sendTransfer(
        Message(
                properties: {
                        message-id: <request id>,
                        reply-to: "<my response link unique address>"
                },
                application-properties: {
                        "operation" -> "<operation>",
                }
        ),
        [Optional] State = transactional-state: {
                txn-id: <txn-id>
        }
)

応答メッセージの受信

応答リンクから応答メッセージを受信します。

responseMessage = responseLink.receiveTransfer()

応答メッセージは次の形式になります。

Message(
properties: {
		correlation-id: <request id>
	},
	application-properties: {
			"statusCode" -> <status code>,
			"statusDescription" -> <status description>,
           },
)

Service Bus エンティティのアドレス

Service Bus エンティティは、次のようにアドレス指定する必要があります。

エンティティ型 Address
queue <queue_name> “myQueue”

“site1/myQueue”
topic <topic_name> “myTopic”

“site2/page1/myQueue”
subscription <topic_name>/Subscriptions/<subscription_name> “myTopic/Subscriptions/MySub”

メッセージ操作

メッセージ更新ロック

キューまたはサブスクリプションに設定されているロック期間によって、メッセージのロックを拡張します。

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:renew-lock
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
lock-tokens UUID の配列 はい 更新するメッセージ ロック トークン。

Note

ここでのロック トークンは、受信した AMQP メッセージの delivery-tag プロパティを参照します。 遅延メッセージを受信し、そのロックを更新する場合は、delivery-tag ではなく、メッセージの lock-token プロパティを使用します。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - 成功、それ以外の場合は失敗。
statusDescription string いいえ ステータスの説明。

応答メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
expirations タイムスタンプの配列 はい 要求ロック トークンに対応するメッセージ ロック トークンの新しい有効期限。

メッセージのピーク

ロックせずにメッセージをピークします。

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:peek-message
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
from-sequence-number long はい ピークを開始するシーケンス番号。
message-count INT はい ピークするメッセージの最大数。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - さらにメッセージがあります。

204: No content - これ以上メッセージはありません。
statusDescription string いいえ ステータスの説明。

応答メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
messages マップのリスト はい 各マップが表すメッセージのリスト。

メッセージを表すマップには、次のエントリが含まれている必要があります。

Key 値型 必須 値の内容
message byte 型の配列 はい AMQP 1.0 のワイヤーエンコードされたメッセージ。

メッセージのスケジュール設定

メッセージのスケジュールを設定します。 この操作はトランザクションをサポートします。

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:schedule-message
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
messages マップのリスト はい 各マップが表すメッセージのリスト。

メッセージを表すマップには、次のエントリが含まれている必要があります。

Key 値型 必須 値の内容
message-id string はい 文字列としての amqpMessage.Properties.MessageId
session-id string いいえ amqpMessage.Properties.GroupId as string
partition-key string いいえ amqpMessage.MessageAnnotations.”x-opt-partition-key"
via-partition-key string いいえ amqpMessage.MessageAnnotations."x-opt-via-partition-key"
message byte 型の配列 はい AMQP 1.0 のワイヤーエンコードされたメッセージ。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - 成功、それ以外の場合は失敗。
statusDescription string いいえ ステータスの説明。

応答メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
sequence-numbers long の配列 はい スケジュール済みメッセージのシーケンス番号。 シーケンス番号は取り消しに使用されます。

スケジュール済みメッセージの取り消し

スケジュール済みメッセージを取り消します。

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:cancel-scheduled-message
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
sequence-numbers long の配列 はい 取り消すスケジュール済みメッセージのシーケンス番号。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - 成功、それ以外の場合は失敗。
statusDescription string いいえ ステータスの説明。

セッション操作

セッション更新ロック

キューまたはサブスクリプションに設定されているロック期間によって、メッセージのロックを拡張します。

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:renew-session-lock
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
session-id string はい セッション ID。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - さらにメッセージがあります。

204: No content - これ以上メッセージはありません。
statusDescription string いいえ ステータスの説明。

応答メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
expiration timestamp はい 新しい有効期限。

セッション メッセージのピーク

ロックせずにセッション メッセージをピークします。

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:peek-message
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
from-sequence-number long はい ピークを開始するシーケンス番号。
message-count INT はい ピークするメッセージの最大数。
session-id string はい セッション ID。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - さらにメッセージがあります。

204: No content - これ以上メッセージはありません。
statusDescription string いいえ ステータスの説明。

応答メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
messages マップのリスト はい 各マップが表すメッセージのリスト。

メッセージを表すマップには、次のエントリが含まれている必要があります。

Key 値型 必須 値の内容
message byte 型の配列 はい AMQP 1.0 のワイヤーエンコードされたメッセージ。

セッションの状態の設定

セッションの状態を設定します。

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:set-session-state
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
session-id string はい セッション ID。
session-state バイト配列 はい 非透過的なバイナリ データ。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - 成功、それ以外の場合は失敗
statusDescription string いいえ ステータスの説明。

セッションの状態の取得

セッションの状態を取得します。

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:get-session-state
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
session-id string はい セッション ID。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - 成功、それ以外の場合は失敗
statusDescription string いいえ ステータスの説明。

応答メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
session-state バイト配列 はい 非透過的なバイナリ データ。

セッションの列挙

メッセージング エンティティのセッションを列挙します。

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:get-message-sessions
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
last-updated-time timestamp はい 指定の時間以降に更新されたセッションだけを含めるためのフィルター。
skip INT はい 多数のセッションをスキップします。
top INT はい セッションの最大数。

Note

LastUpdatedTimeDateTime.MaxValue (.NET で) に設定すると、 Enumerate Sessions メソッドは、状態があるかどうかに関係なく、すべてのセッションを返します。 .NET の DateTime.MaxValue は、他のプログラミング言語には存在しない可能性があります。 このような場合は、 エポック (1970 年 1 月 1 日 00:00:00 GMT) から 253402300800000 ミリ秒のタイムスタンプを使用します。これは、.NET での DateTime.MaxValue に相当します。

回答

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - さらにメッセージがあります。

204: No content - これ以上メッセージはありません。
statusDescription string いいえ ステータスの説明。

応答メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
skip INT はい スキップされたセッションの数 (状態コードが 200 の場合)。
sessions-ids 文字列の配列 はい セッション ID の配列 (状態コードが 200 の場合)。

ルール操作

ルールの追加

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:add-rule
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
rule-name string はい ルール名。サブスクリプションとトピックの名前は含まれません。
rule-description map はい 次のセクションで指定されたルールの説明。

rule-description マップには、次のエントリが含まれている必要があります。sql-filtercorrelation-filter を同時に含めることはできません。

Key 値型 必須 値の内容
sql-filter map はい 次のセクションで指定された sql-filter
correlation-filter map はい 次のセクションで指定された correlation-filter
sql-rule-action map はい 次のセクションで指定された sql-rule-action

sql-filter マップには、次のエントリが含まれている必要があります。

Key 値型 必須 値の内容
expression string はい SQL フィルター式。

correlation-filter マップには、次のエントリが 1 つ以上含まれている必要があります。

Key 値型 必須 値の内容
correlation-id string いいえ
message-id string いいえ
to string いいえ
reply-to string いいえ
label string いいえ
session-id string いいえ
reply-to-session-id string いいえ
content-type string いいえ
properties map いいえ Service Bus ServiceBusMessage.Properties へのマップ

sql-rule-action マップには、次のエントリが含まれている必要があります。

Key 値型 必須 値の内容
expression string はい SQL アクションの式。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - 成功、それ以外の場合は失敗
statusDescription string いいえ ステータスの説明。

ルールの削除

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:remove-rule
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
rule-name string はい ルール名。サブスクリプションとトピックの名前は含まれません。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - 成功、それ以外の場合は失敗
statusDescription string いいえ ステータスの説明。

ルールの取得

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:enumerate-rules
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
top INT はい ページ内でフェッチされるルールの数。
skip INT はい スキップするルールの数。 ルールの一覧で開始インデックス (+1) を定義します。

Response

応答メッセージには、次のプロパティが含まれています。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - 成功、それ以外の場合は失敗
rules マップのリスト はい ルールのリスト。 各ルールはマップで表現されます。

リスト内の各マップ エントリには、次のプロパティが含まれています。

Key 値型 必須 値の内容
rule-description 記述されたオブジェクト はい AMQP で記述されたコード 0x0000013700000004 が含まれる com.microsoft:rule-description

com.microsoft.rule-description 自体が記述されたリストです。 これは次のプロパティを持ちます。

インデックス 値型 必須 値の内容
0 記述されたリスト はい 次の表のとおりに指定される filter
1 記述されたリスト はい このセクションの後半のとおりに指定される ruleAction
2 string はい ルールの名前です。
3 timestamp はい タイム スタンプ。

filter は次のいずれかの種類になります。

記述子名 記述子コード
com.microsoft:sql-filter:list 0x000001370000006 SQL フィルター
com.microsoft:correlation-filter:list 0x000001370000009 関連付けフィルター
com.microsoft:true-filter:list 0x000001370000007 1=1 を表す true フィルター
com.microsoft:false-filter:list 0x000001370000008 1=0 を表す false フィルター

com.microsoft:sql-filter:list は次の内容が含まれる、記述されたリストです。

インデックス 値型 必須 値の内容
0 string はい SQL フィルター式
1 INT はい 常に 20。 この整数は、SQL フィルターの互換性レベルです。 SQL フィルターの構文バージョンを示します。

com.microsoft:correlation-filter:list は次の内容が含まれる、記述されたリストです。

インデックス (存在する場合) 値の型 値の内容
0 string 関連付け ID
1 string メッセージ ID
2 string 終了
3 string 返信
4 string Label
5 string セッション ID
6 string 返信セッション ID
7 string コンテンツの種類
8 マップ アプリケーションで定義されているプロパティのマップ

ruleAction は次のいずれかの種類になります。

記述子名 記述子コード
com.microsoft:empty-rule-action:list 0x0000013700000005 空のルール アクション - ルール アクションは存在しません
com.microsoft:sql-rule-action:list 0x0000013700000006 SQL ルール アクション

com.microsoft:sql-rule-action:list は、2 つの要素がある記述されたリストです。

インデックス 値型 必須 値の内容
0 string はい SQL ルール アクションの式
1 INT はい 常に 20。 この整数は、SQL フィルターの互換性レベルです。 SQL フィルターの構文バージョンを示します。

遅延メッセージ操作

シーケンス番号での受信

遅延メッセージをシーケンス番号で受信します。

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:receive-by-sequence-number
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
sequence-numbers long の配列 はい シーケンス番号。
receiver-settle-mode ubyte はい AMQP core v1.0 で指定されている受信側解決モード。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - 成功、それ以外の場合は失敗
statusDescription string いいえ ステータスの説明。

応答メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
messages マップのリスト はい 各マップがメッセージを表すメッセージのリスト。

メッセージを表すマップには、次のエントリが含まれている必要があります。

Key 値型 必須 値の内容
lock-token uuid はい ロック トークン (receiver-settle-mode が 1 の場合)。
message byte 型の配列 はい AMQP 1.0 のワイヤーエンコードされたメッセージ。

廃棄状態の更新

遅延メッセージの廃棄状態を更新します。 この操作はトランザクションをサポートします。

要求

要求メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
operation string はい com.microsoft:update-disposition
com.microsoft:server-timeout uint いいえ 操作のサーバー タイムアウト (ミリ秒単位)。

要求メッセージの本文は、次のエントリが含まれたマップを含む amqp-value セクションで構成されている必要があります。

Key 値型 必須 値の内容
disposition-status string はい 完了

abandoned

suspended
lock-tokens UUID の配列 はい 廃棄状態を更新するメッセージ ロック トークン。
deadletter-reason string いいえ 廃棄状態が suspended に設定されている場合に設定されます。
deadletter-description string いいえ 廃棄状態が suspended に設定されている場合に設定されます。
properties-to-modify map No 変更する Service Bus ブローカー メッセージのプロパティのリスト。

Response

応答メッセージには、次のアプリケーション プロパティが含まれている必要があります。

Key 値型 必須 値の内容
statusCode INT はい HTTP 応答コード [RFC2616]

200: OK - 成功、それ以外の場合は失敗
statusDescription string いいえ ステータスの説明。

次のステップ

AMQP と Service Bus の詳細については、次のリンクを参照してください。