2011-11-13 5 views
0

アプリケーションを1日に1回実行したい場合、開始するときには、購読しているキューからすべてのメッセージを読み込み、何らかの処理を行い、メッセージを発行して閉じなければなりません。メッセージはNServiceBusを介して送信されました。どのように処理されたかをどのように伝えますか?私はどのようにキュー内のすべてのメッセージを処理し、キューが空であるかを知ることができません。NServiceBusと組み合わされたアプリケーションの実行予定

+0

キューが空のときにアプリケーションが終了したいのはなぜですか? –

+0

NSBはスケジュールを維持するのか、それとも何らかの外部エンティティになるのだろうか? –

+0

スケジュールはスケジュールされたタスクによって実行され、営業終了後1日に1回のみ実行されます。ビジネスが終了すると、タスクが実行され、キュー内のすべてのメッセージが処理された後、再び閉じられます。 – Fellmeister

答えて

1

NSertviceBus固有のものではなく、アーキテクチャ上の問題のようです。

は、これは私がNSBでそれを解決する方法を次のとおりです。

私は私のエンドポイント(加入者)Quartz .Netを実装し、StartOfBusinessDay(毎日)を示すコマンド/メッセージを送信するジョブをスケジュールする必要があります。

私はSagaを持っていて、StartOfBusinessDayで始まり、Sagaが初期化されると、TimeOut of T +(営業時間終了までの時間)を要求します。

この佐賀はメッセージを引き続き受信し、後で処理するために集約します。

TimeOutが発生すると、集計されたすべてのメッセージを処理してProcessCompletedEventを発行して、終了日のバッチが完了したことを他のサブスクライバに通知し、その日のMarkSagaCompletedを行います。

これが役に立ちます。

+0

これで私は動作します。 – Fellmeister

+0

StartOfBusinessDayは、前回の営業日が終了した後、基本的に2番目のメッセージになります。サガは今日のメッセージの中にどのようにマップされますか? – Fellmeister

+0

はい.. StartOfBusinessDayは、タイムアウト後に秒を始動するようにスケジュールすることもできます。また、ONE Sagaのみがアクティブでメッセージを受信できる状態になるため、メッセージをSagaにマップする必要はありません。 – Sarmaad

関連する問題