2017-10-24 14 views
2

プロジェクトdocumentationに基づいて、javaバージョンにはいくつかのcronベースのスケジューリングが存在します。しかし、私はネットの実装で似たようなものは見つけられません。apache ignite .netスケジュールされたタスク

私の仕事は、1日に1回、長時間実行されているジョブでキャッシュを更新することです。この場合(.net版の予定機能はありません)私はクライアントモードで起動し、データでキャッシュを更新するappを作成すると思います。そして、Windowsタスクスケジューラでこのアプリを実行します。

もっと良い解決策がありますか?あるいは良い例ですか?答えの後に実装さ

ソリューションを受け取った:

はperiodicalyジョブをスケジュールするためのFluentSchedulerを使用します。残念ながら、私が使用しようとしたHangFireが機能しませんでした。何らかの理由で現在の実行スケジューラを含むノードが失敗した場合、またはサービスが残りのノードの1つで開始され、スケジューリングジョブは失われません。

スケジューラジョブコード

public class CacheUpdateRegistry : Registry 
{ 
    private readonly IIgnite _ignite; 

    public CacheUpdateRegistry(IIgnite ignite) 
    { 
     _ignite = ignite; 

     // output to console current node id as example each 2 seconds 
     Schedule(() => Console.WriteLine("Recurring on node: + " + _ignite.GetCluster().GetLocalNode().Id)).ToRunNow().AndEvery(2).Seconds(); 
    } 

} 

サービスコード:

public class CacheUpdateSchedulerService : IService 
{ 
     [InstanceResource] 
     private readonly IIgnite _ignite; 

    public void Init(IServiceContext context) 
    { 
     Console.WriteLine("CacheUpdateSchedulerService initialized"); 
     obManager.Initialize(new CacheUpdateRegistry(_ignite)); 
    } 

    // other code removed for brevity 

} 

のIgniteノードコード:

var services = _ignite.GetServices(); 
services.DeployClusterSingleton("cacheUpdateScheduler", new CacheUpdateSchedulerService()); 

答えて

3

Ignit e JavaのスケジューラAPIは、基本的にはローカルのみです。実際にIgniteとはほとんど関係がありません。

そのため、.NET側でこのAPIを省略することにしました。これはTimerクラスでも同じことが達成できます。

+0

「Replacation」モードで動作するキャッシュを更新するために、このようなスケジュールされたタスクを実行するCluster Singletonサービスを作成するのは正しいでしょうか? – aleha

+0

はい、タイマー付きクラスタシングルトンサービスは良いアプローチです。 –

+1

は、FluentSchedulerを使用してクラスタシングルトンサービスを実装しました。よく働く。 – aleha

関連する問題