NServiceBusを使用してタスクをスケジュールするエレガントな方法はありますか?ネットを検索しているときに見つけた方法が1つあります。NServiceBusはスケジューリング用の内部APIを提供しますか?
2 に答える
NServiceBus にはこれが組み込まれています
ここからhttp://docs.particular.net/nservicebus/scheduling-with-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’.");
});
}
}
警告に注意してください
使用しないとき。スケジュールされたタスクは、終わりのない単純な物語と見なすことができます。しかし、タスクが何らかのロジック (if/switch ステートメント) を取得し始めたらすぐに、サガへの移行を検討する必要があります。
注: この回答は NServiceBus バージョン 2.0 に対して有効でしたが、もはや正しくありません。バージョン 3 にはこの機能があります。サイモンの答えを読んでください。バージョン3で有効です!
NServiceBus には組み込みのスケジューリング システムがありません。これは (非常に単純なレベルで) メッセージ プロセッサです。
IWantToRunAtStartup (Run および Stop メソッド) を実装するクラスを作成し、そこからタイマーを作成するか、特定の時間にメッセージをバスにドロップするために必要なロジックを実行できます。
他の人々は、Quartz.NETを NServiceBus と一緒に使用して、より詳細なスケジューリング機能を取得しています。