Microsoft サービスの相互通信の問題
-
20-08-2019 - |
質問
現在、2 つの Windows サービスを構築しています。
1 つ目は、インターネット接続からメッセージを取得し、データベースに挿入します。これは高速かつ安定するように設計されており、他の処理は行いません。
2 つ目は、前回の実行以降に到着した新しいメッセージを使用してバッチ プロセスを実行します。
新しいメッセージを処理する準備ができたときにのみ 2 番目のサービスがバッチ プロセスを実行し、2 番目のサービスでエラーが発生した場合は最初のサービスが続行し、その逆も同様であるようにする方法を考えようとしています。現時点では 5 秒ごとにループが使用されます。
現在、メッセージキューの使用を考えています。最初のサービスはキューが空の場合にのみメッセージを書き込み、2番目のサービスはキューにメッセージが含まれているかどうかを確認し、含まれていない場合はメッセージが到着するまで非同期待機に入ります。メッセージを削除して実行します。したがって、キューを実際にはキューとしてではなく、状態が変化したときに 2 番目のサービスに対してイベントをトリガーするバイナリ スイッチとして使用します。
これを行うには、私がまだ出会ったことのないより良い方法があると思いますが、誰かが私に正しい方向を教えてくれませんか?
解決
実は、あなたのやり方は、 その通り これらの結果に対してこれをどのように実装するか。MSMQ を使用すると、キューにメッセージが書き込まれているかどうかを確認する必要がなく、最初のサービスはキューに書き込むだけで、2 番目のサービスはキューから読み取って処理するだけです (アクティブな場合)。
MSMQ を使用する利点は、どちらかのサービスがダウンする可能性があることですが、 キュー が起動するので、処理を続行できます。
他のヒント
あなたが必要とするすべてのメールスロットである。この場合のためにあるかのように私には見えます。その後、最初のサービスDBに格納すると、メッセージを「やるべき仕事」を送信します。もう一つは、ちょうど受信メッセージをお待ちしています。
MSMQは、この単純な何かのためのビットのヘビー級です。その後、再び、あなただけのMSMQを使用し、それはあまりにも完全にdBで取り除くことができます。 のことのそれを行う方法になります。