フォレックス

サービスブローカーとは

サービスブローカーとは
ということで今回はOpen Service Broker for さくらのクラウドについて紹介しました。
Open Service Broker/Service Catalogは非常に便利ですのでぜひ使ってみてください!!

[SQL Server 2012] Service Brokerで単一データベース内でメッセージ交換してみた

ちなみに、Service Broker とは SQL Server インスタンス間で信頼性の高い(メッセージの発信先に順番通りに重複なしに1回のみ送信する)、非同期のメッセージ交換を実現するテクノロジです。SQL Server 2012 のページには2008 R2 以降に大幅な変更がないということで新機能(マルチキャスト送信など) や サービスブローカーとは 簡単な説明のみが記載されています。それ以外は2008R2 のドキュメントを参照してくださいと記載があります。

SQL Server Service Broker
http://msdn.サービスブローカーとは microsoft.com/ja-jp/library/bb522893.aspx
上記URLに"Service Broker の概念、開発作業、および管理作業については、以前に公開されたドキュメントを参照してください。 Service Broker は SQL Server 2012 においてわずかな変更しか加えられていないため、SQL Server 2012 用のドキュメントは作成されていません。"と記載があります。

  • SQL Server 2012 Developer Edition (ドメインのメンバサーバー)

1. メッセージ交換オブジェクトの作成

Service Broker を使用して単一のデータベース内でメッセージを交換する場合、 次の定義が必要です。

  • 送受信メッセージに使用するデータ型
  • 送受信に使用するメッセージの組み合わせを定義したコントラクト
  • メッセージ受信に使用するキュー
  • メッセージ交換で使用する受信用のキューとメッセージのコントラクトの組み合わせを定義したサービス

異なるSQL Server インスタンス間でメッセージを交換する場合はルートやエンドポイントの定義や証明書の設定などさらに必要ですが今回は不要なので定義しません。

冒頭のURLで紹介したチュートリアルとほぼ同じですが次のように定義します。コメントで記載していますが、サービスブローカーが対象データベースで有効になっているかは sys.サービスブローカーとは databases ビューのis_broker_enabled で確認できます。サービスブローカーは既定で有効になっていますが、有効関する場合は、コメントにしたサンプルスクリプトのように alter database に サービスブローカーとは set enable_broker を設定します。CREATE MESSAGE_TYPE などは サービスブローカーとは メッセージに使用る型の定義やコントラクト、キュー、サービスを定義しています。下部の sys.service_message_types 等のビューをselectしているのはCREATE 結果の 確認用です。

2. 発信側からメッセージ交換の開始とメッセージの送信

メッセージ交換を開始するために BEGIN DIALOG 文を使用します。FROM, TO で メッセージ交換に使用するサービスを指定し、ON でメッセージ交換に使用するコントラクトを指定します。send 文で作成したDialog に対してメッセージを送信します。その際メッセージの型を指定しています。

トランザクションを使用しているのでロールバックした場合、メッセージ交換もロールバックされることが保障されます。発信先に送信されたメッセージは select * from TestDb1TargetQueue ステートメントを使用することでキューを確認できます。

3. 発信先でのメッセージの受信と返信とメッセージ交換の終了処理

下記に受信に使用したT-SQLを記載します。 RECEIVE 文でメッセージを受信します。 トランザクションがコミットすると RECEIVEされたメッセージがキューから削除されます。サンプルでは受信したメッセージを xml 型に変換して value 関数で テキストを取り出しています。発信側で行ったと同じように SEND ON 文で応答メッセージを送信しています。その際メッセージの型も指定しています。続いて END CONVERSATION 文で終了のメッセージ(http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog型)を送信しています。

4.発信側から応答メッセージの受信とメッセージ交換の終了処理

発信側では応答メッセージを確認して、メッセージを終了(END CONVERSATION) します。通常 メッセージは発信先、発信側ともに終了(END CONVERSATION) を行って終了します。

説明は以上です。Service Broker 素人なので、ほぼ参考URLのチュートリアルのままでしたがシンプルなケース(単一データベース間のメッセージ交換) で動作確認できました。

関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる