2017-01-17 11 views
-1

誰かに教えてもらえますか?
ServiceBrokerについてです。このようなものの目的は何ServiceBroker - メッセージの種類は何ですか?

CREATE MESSAGE TYPE [//SBM/RequestMessage] VALIDATION=WELL_FORMED_XML; 
CREATE MESSAGE TYPE [//SBM/ReplyMessage] VALIDATION=WELL_FORMED_XML; 

:我々は2 thnigs渡って来ることができるこの短いチュートリアルに続き
https://gallery.technet.microsoft.com/scriptcenter/Using-Service-Broker-for-360c961a
?メッセージを2つのタイプに分類するとどんなメリットがありますか?そしてもう一つは、キューが毒で無効になっているかどうかを確認することですか?私はキューがブロックされていることを知っていますが、私はそれをチェックできるようにしたいと思います。

+1

私はあなたが言葉を混ぜていると思います。メッセージタイプは、どのような種類のデータ(XML、空、バイナリ)を送信できるかです。キューやダイアログの部分を参照しているようです。この質問は現時点では分かりづらい。あなたが話していることを見ることができるように、URLのいくつかのコードを明確にし、参照してください。 – dfundako

+0

よろしくお願いいたします。私はすぐに編集します。 –

+0

このような2つのメッセージタイプを実行する目的は、そのメッセージタイプ(ターゲットまたはイニシエータ)を使用できるユーザーを制限することです。あなたは、両方のためにそのロジックを強制するための契約を作成する必要があります。このサンプルをAdam Machanicからチェックしてください:https://www.simple-talk.com/sql/learn-sql-server/service-broker-foundations-workbench/ – dfundako

答えて

0

メッセージタイプを使用することの1つは、実際にメッセージ自体を見る必要なしにメッセージを処理する方法を知ることです。 HRチームとFinanceチームの両方にサービスを提供する異なるアプリケーションからの会話を処理するシステムを作成しているとしましょう。それらは別のキューに属していると主張できますが、それらのメッセージのすべてが1つのキューに入っていると仮定しましょう。キューからメッセージをデキューする手順では、次のようなものがあります(簡略化)。 @message_type_name sysname、@message_body xml)を宣言します。

RECEIVE TOP (1) 
    @message_type_name = [message_type_name], 
    @message_body = CAST([message_body] AS XML) 
FROM [repl].[CoreQueue] 

IF (@message_type_name = 'TimeOffRequest') 
    EXEC dbo.ProcessTimeOffRequest @message_body; 
ELSE IF (@message_type_name = 'ReimbursementRequest') 
    EXEC dbo.ProcessReimbursementRequest @message_body; 

注私はあなたの実際の質問の周りの明確化のために(RECEIVEは、一度に1つのメッセージのみ、ノーエラー処理などをINGの)ここにいくつかのアンチパターンを採用しています。

メッセージの種類に基づいてメッセージの内容についてわかっているので、メッセージを処理できるようにメッセージをすばやくルーティングできます。ブローカーの優先順位で優先順位を付けることができる契約にメッセージタイプをバンドルする機能を追加すると、かなり柔軟なシステムが得られます。

+0

これで、アクティブ化されたプロシージャは、キューには、より多くの1種類のメッセージが含まれています。それ以外の場合は、エラーが発生します。 「一度に1つのメッセージしか受信できません」というメッセージが表示されないのはなぜですか?結局、受信したメッセージの数ではなく、NUMBER_READER_QUEUEを増やすことができます。 –

+0

私が作りたいと思っている類推は、食べるためにあなたの前に米の皿があったら、一度に1つの穀物をあなたのフォークに入れないことです。言い換えれば、バッチ処理は、個々のアイテムの逐次処理よりもほぼ常に効率的です。 –

関連する問題