2011-07-19 10 views
5

NServiceBusを使用してタスクをスケジュールする洗練された方法はありますか?私が見つけた1つの方法がありますが、searching the netです。 NServiceBusはスケジューリングのための内部APIを提供しますか?NServiceBusを使用して毎日実行するタスクをスケジュールする方法

+0

私たちはその方法を使い、うまくいきます。どのような処理をしていますか?あなたは代わりにサガを必要とするかもしれません。 –

+0

私は同じ方法を使用しようとしています。しかし、私はスケジューラの実装でバスの参照を取得する方法を把握することができません。 – frictionlesspulley

+1

面白い私は同じ問題があった。私はバスのインスタンスを明示的にコンテナに要求してしまいました:IBus bus = Configure.Instance.Builder.Build ();.これが質問に答えると、回答として編集して投稿します。 –

答えて

8

NServiceBusは今、これはそれを使用しない

public class ScheduleStartUpTasks : IWantToRunWhenTheBusStarts 
{ 
    public void Run() 
    { 
     Schedule.Every(TimeSpan.FromMinutes(5)).Action(() => 
      Console.WriteLine("Another 5 minutes have elapsed.")); 

     Schedule.Every(TimeSpan.FromMinutes(3)).Action(
          "MyTaskName",() => 
          { 
           Console.WriteLine("This will be logged under MyTaskName’."); 
          }); 
    } 
} 

http://docs.particular.net/nservicebus/scheduling-with-nservicebusここから警告

が組み込まれています。スケジュールされたタスクは決して単純なものとして見ることはできません。 エンディングサガ。しかし、あなたの仕事が少しの論理を得るようになるとすぐに、 (if-/switch-statements)はあなたがサガに移ることを考慮する必要があります。

+0

うわー!この投稿に感謝します – frictionlesspulley

+0

これは私のために働いた...とにかくしばらくの間。それから、ある日は生産に失敗し、スケジューラは残りのバスが稼働していても2日間ダウンしました。 NSBのエラーメッセージは記録されませんでした。だから今私は代わりにQuartz.NETを使用して探しています。どうやらこれは既知の問題です... http://stackoverflow.com/q/23732174/61697 – demoncodemonkey

+0

@demoncodemonkey https://github.com/Particular/NServiceBus/issues/2133で修正された既知の問題です。しかしクォーツ。NETは完全に有効な代替品です – Simon

3

注:この回答はNServiceBusバージョン2.0で有効でしたが、もはや正しいものではありません。バージョン3にはこの機能があります。サイモンの答えを読んでください、それはバージョン3に有効です!

NServiceBusには、スケジューリングシステムが組み込まれていません。これはメッセージプロセッサー(非常に単純なレベル)です。

IWantToRunAtStartup(実行と停止のメソッド)を実装するクラスを作成し、そこからタイマーを作成するか、特定の時間にメッセージをバスにドロップするために必要なロジックを実行できます。

他の人々は、より細かいスケジューリング機能を得るためにNServiceBusと共にQuartz.NETを使用しました。

+0

メッセージングのためにNServiceBusを使用するまでは、他のサービスのスケジューリングにQuartzを使用しました。これは、私がQuartzスケジューラが無効になった後に、スケジュールを立てる必要がある最初の時間です。 – frictionlesspulley

+2

私はQuartzを使用して1時間ごとにジョブをトリガし、そのジョブはただイベントを公開しました...サービスはIWantToRunAtStartupでRun&Stopメソッドを利用しました。ここは良いスタートですhttp://stuartcullinan.blogspot.com/2010/12 /building-nservicebus-timeout-manager.html、btw、[NServiceBusContrib](https://github.com/nservicebus/nservicebus-contrib)をチェックしてください – Sarmaad

+0

この回答はもう間違いです。 – Simon

関連する問題