質問

現在、2 つの Windows サービスを構築しています。

  • 1 つ目は、インターネット接続からメッセージを取得し、データベースに挿入します。これは高速かつ安定するように設計されており、他の処理は行いません。

  • 2 つ目は、前回の実行以降に到着した新しいメッセージを使用してバッチ プロセスを実行します。

新しいメッセージを処理する準備ができたときにのみ 2 番目のサービスがバッチ プロセスを実行し、2 番目のサービスでエラーが発生した場合は最初のサービスが続行し、その逆も同様であるようにする方法を考えようとしています。現時点では 5 秒ごとにループが使用されます。

現在、メッセージキューの使用を考えています。最初のサービスはキューが空の場合にのみメッセージを書き込み、2番目のサービスはキューにメッセージが含まれているかどうかを確認し、含まれていない場合はメッセージが到着するまで非同期待機に入ります。メッセージを削除して実行します。したがって、キューを実際にはキューとしてではなく、状態が変化したときに 2 番目のサービスに対してイベントをトリガーするバイナリ スイッチとして使用します。

これを行うには、私がまだ出会ったことのないより良い方法があると思いますが、誰かが私に正しい方向を教えてくれませんか?

役に立ちましたか?

解決

実は、あなたのやり方は、 その通り これらの結果に対してこれをどのように実装するか。MSMQ を使用すると、キューにメッセージが書き込まれているかどうかを確認する必要がなく、最初のサービスはキューに書き込むだけで、2 番目のサービスはキューから読み取って処理するだけです (アクティブな場合)。

MSMQ を使用する利点は、どちらかのサービスがダウンする可能性があることですが、 キュー が起動するので、処理を続行できます。

他のヒント

あなたが必要とするすべてのメールスロットである。この場合のためにあるかのように私には見えます。その後、最初のサービスDBに格納すると、メッセージを「やるべき仕事」を送信します。もう一つは、ちょうど受信メッセージをお待ちしています。

MSMQは、この単純な何かのためのビットのヘビー級です。その後、再び、あなただけのMSMQを使用し、それはあまりにも完全にdBで取り除くことができます。 のことのそれを行う方法になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top