2012-04-27 22 views
4

現在、メッセージを取得するためにポーリングクライアントを使用するメッセージベースのアーキテクチャを作成しています。明らかな理由から、メッセージをテーブルに挿入するときにイベントを受け取るために、クライアントをSQL Server 2008に登録したいと考えています。SQL Server 2008イベントドリブンアーキテクチャ

SQL Serverメッセージブローカー、CLRストアドプロシージャ、およびStreamInsightを調査しているWebラウンドラウンドが行われていますが、私が探しているものを見つけることができません。SQL Serverがサービスを警告する方法メッセージが受信されたことを示します。基本的には、ポーリングモデルではなくイベント駆動型モデルです。

これはありますか?どこから始めればいいですか?例はありますか?

答えて

3

はい、これは存在します。 SQL Service Brokerを使用して成功しました。私はあなたがリストした他のオプションに慣れていません。

SSBの設定は非常に多くの可動部品と細部があるためうまくいきますが、うまく動作します。ポーリングを避けるための主要な部分は、C#から作成して呼び出すストアドプロシージャです。ショートプロシージャでは、RECEIVE WAITFOR文があります。これは、メッセージがキュー内で使用可能になるか、タイムアウトが発生するまで、オープンおよびトランザクション接続をブロックします。 C#では、結果を取得するかタイムアウトにするかは、すぐに次の項目を待つためにプロシージャを再度実行します。

可能であれば、SQL ...へのオープン接続の数を1に制限することをお勧めします。利害関係者が複数いる場合は、その1つの接続を通してすべてのものをプッシュし、他の方法でC#サーバーに配布してください。

+0

ありがとうございました! RECEIVE WAITFORについて読んだことがありますが、トリガー内で呼び出せるWCFエンドポイントを登録できることを期待していました。 私は、スレッドをブロックし、DB接続を開いたままにしておくのが好きではありません。私は、少なくとも3つの異なるクライアントがメッセージをチェックするようにするので、私はポーリングクライアントを使用すると思う。スケーリングとフェイルオーバーのために、それぞれ異なるマシン上に2つのインスタンスが最低限必要です。これはエンタープライズアプリケーションです。 RECEIVE WAITFORを使用するために単一のクライアントを使用できますが、1つの障害ポイントを意味します。私は間違いなくそれを望んでいます。 – NickV

+0

さて、オープンな接続はそれほど悪くありません。 「本当の」ものではなく、待っている間にそれ以上のトラフィックはありません。 SQLはプッシュアウトすることができませんので、このポーリングは残しておきます(分かっているように)、ポーリングはより多くのトラフィックになります。 –

+0

いいですね。私は、「一日のうちに、より多くのトラフィックと、おそらくはより多くのオープンな接続」についてのポイントが好きです。私は待っている時間はあまり期待していない! – NickV