2017-11-30 38 views
1

私たちは、製品にハローキャスト分散ロック機能とキャッシュ機能を使用しています。分散ロックの使用は、ビジネスロジックにとって非常に重要です。Hazelcast - クライアントモード - クラスタ障害後の復旧方法

現在、私たちは組み込みモードを使用しています(各アプリケーションノードはヘーゼルキャストクラスタメンバーです)。クライアント - サーバーモードに切り替えるつもりです。

クライアント - サーバで気づいた問題は、ある期間クラスタがダウンした後、いくつかの試行後にクライアントが破棄され、そのクライアントから取り出されたオブジェクト(マップ、セットなど)がより長い使用可能。

issue1

:クライアントのインスタンスは(私たちはHazelcastInstanceNotActiveExceptionを受け取る)Hazelcastクラスタが復旧した後も

を回復しない はまた、私はこの問題は、数回に対処し、機能要求として終わってきたことを知っています

issue2

issue3

私の質問:何がすべきクライアントを回復する戦略ですか?現在、以下のようにクライアントプロセスでタスクをエンキューする予定です。条件に基づいて、クライアントインスタンスを再起動しようとします... クライアントが実行されているかどうかは、clientInstance.getLifecycleService()。isRunning()checkによってチェックされます。ここで

は、タスクコードです:

private class ClientModeHazelcastInstanceReconnectorTask implements Runnable { 

    @Override 
    public void run() { 
     try { 
      HazelCastService hazelcastService = HazelCastService.getInstance(); 
      HazelcastInstance clientInstance = hazelcastService.getHazelcastInstance(); 
      boolean running = clientInstance.getLifecycleService().isRunning(); 
      if (!running) { 
       logger.info("Current clientInstance is NOT running. Trying to start hazelcastInstance from ClientModeHazelcastInstanceReconnectorTask..."); 
       hazelcastService.startHazelcastInstance(HazelcastOperationMode.CLIENT); 
      } 
     } catch (Exception ex) { 
      logger.error("Error occured in ClientModeHazelcastInstanceReconnectorTask !!!", ex); 
     } 
    } 

} 

は、適切なこのアプローチですか?私はLifeCycleのイベントも聞いてみましたが、イベントを介して動作させることはできませんでした。

みなさま

答えて

関連する問題