2009-03-23 13 views
2

SQL Service 2005 Service Brokerを初めて使用しました。私はキューを作り、会話がうまくいくなどしました。しかし、私は「スロットル」メッセージを並べ替えたいと思います。Service Brokerキューのフラッディングを減らす方法はありますか。

メッセージは、マルチユーザーアプリケーションによって呼び出されるストアドプロシージャによって送信されます。 20人のユーザがこのprocを30秒間に1回ずつ呼び出させると、1回だけ送信する必要があるとします。だから私は私のprocからメッセージが最後の30秒以内に送信されたかどうかを確認するいくつかの方法が必要だと思いますか?それを行う方法はありますか?

私が持っていた考えの1つは、要求キューのアクティブ化procが呼び出されたかどうかを示す「応答」キューにメッセージを送信することでした。次に、私のストアドプロシージャ(ユーザアプリケーションによって呼び出された)に、その特定のメッセージが最近呼び出されたかどうかを確認します。問題は、私はこれが応答キューを台無しにしたくないということです。メッセージが存在するかどうかを確認するためにキュー(受信しない)で覗くことはできますか?

または、後で何を達成するためのより簡単な方法がありますか?

答えて

4

はい、キューにあるメッセージを調べて、メッセージが手元にあるかどうかを確認できます。 RECEIVEではなくSELECTを使用してキューに問い合わせるだけで、データを見ることができます。

もっと良い方法は、メッセージを送信して、メッセージを受け取ったストアドプロシージャがメッセージを投げ捨てるかどうかを決定することです。

パフォーマンスブローカーに一度に何十万ものメッセージを送信します。

パフォーマンスの問題が発生した場合は、Service Brokerのパフォーマンスを向上させる最も簡単で簡単な方法であるため、会話ごとに複数のメッセージを送信してみてください。

1

SBでこれを行うことはできますかどうかはわかりませんが、メッセージが送信されたときに更新されたタイムスタンプフィールドを持つテーブルを持つことができますか。 procは30秒以上の時間差を確認して送信します。

関連する問題