2

特定の時点でタスクを実行する必要があるアプリを作成しているので、Quartz.NET を使用する予定です。ただし、実行する必要があるタスクには複数のステップがあり、そのうちのいくつかは少し集中的である可能性があるため、MSMQ のようなものを使用してタスクの各部分をキューに入れ、負荷を分散するより小さな焦点のサブタスクを持つことを考えていました。ワンビットタスク。

これに関する唯一の問題は、タスクを確実に完了するために使用したい Quartz.NET の失敗したタスク機能をバイパスすることです。

Quartz.NET を単独で使用してすべてを行う方法を提案できる人はいますか? または、MSMQ を使用して、Quartz.NET の「タスク失敗」機能を引き続き使用する方法を教えてください。(または私が知らないかもしれない他の方法?)

4

3 に答える 3

1

これは、MSMQ の上に構築された NServiceBus 内のサガの概念によく似ています。ノードに作業をディスパッチすると、ノードは作業 (または失敗) で応答します。その後、サガは次にどのタスクを実行するかを調整します。

http://docs.particular.net/nservicebus/sagas/

これに NServiceBus を利用する主な理由の 1 つは、NServiceBus によって多くのインフラストラクチャが抽象化され、ビジネスの動作とその動作に対応するイベントに集中できるようになることです。

于 2011-03-15T23:01:32.997 に答える
0

Quartz.Net タスク内から他のタスクをスケジュールできます。これにより、すべてのサブ タブでタスク失敗機能を使用できるようになりますが、これをメイン タスクに適用することはできません。これにより、MSMQ を使用しなくても、実装したいと考えていた機能と本質的に同じ機能が提供されます。

于 2011-03-17T22:52:45.893 に答える
0

この質問は、別のタスク/プロセス/メッセージ ハンドラーへの非同期呼び出しで制御を渡すのではなく、作業の負荷を分散することが望ましいことを示しているだけです。

その場合、Quartz ジョブは、他のサービスが取得できるように「タスク」メッセージを MSMQ にプッシュできます。Execute次に、メソッドを終了する前に、別のキューで「応答」メッセージを待つことができます。そのキューをポーリングすることでこれを行うことができます。成功または失敗のメッセージを受信すると、Executeメソッドを正常に終了するか、JobExecutionException.

このソリューションはあまりエレガントではありません。要求/応答メカニズムとトランスポートは、WCF や NServiceBus などによって抽象化できますが、基本的に二重通信であるものを暗黙のうちに求めているという事実は、MSMQ にはあまり適していないことを意味します。ただし、可能です ( http://www.codeproject.com/Articles/41907/WCF-Duplex-MSMQまたはhttp://docs.particular.net/samples/fullduplex/を参照)。何らかの種類の一連の Web サービスを使用して、それらを非同期的に呼び出し、すべての完了を待機する方がよい場合があります。

于 2012-11-04T22:08:48.120 に答える