2017-05-02 14 views
0

私はdockerで動作しているバックエンドJavaアプリケーション(Springを使用)で作業しています。このアプリケーションにはFirebase RealTime Listenerがあります。ローカルでは完璧に動作します!私はドッカーでそれを展開し、2つのインスタンス(コンテナ)を作成するときしかし、それは(それが一度だけ実行する必要があります)私はFirebase RTDBで変更を行う際に2回同じロジックを実行するために開始します。でもそれは、2インスタンスを持っている、Firebase Listenerを使用したバックエンドJavaアプリケーションの複数の問題の問題

FirebaseOptions options; 
    options = new FirebaseOptions.Builder() 
     .setServiceAccount(new FileInputStream(resourceDir + File.separator 
      +"test1.json")) 
     .setDatabaseUrl("https://test1.firebaseio.com/").build(); 

    FirebaseApp.initializeApp(options); 

    final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference listenerRef; 
    DatabaseReference commerceRef; 
    commerceRef.orderByChild("got").equalTo(0).addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) { 

     LOGGER.info("data changed:" + dataSnapshot.getKey()); 
     LOGGER.info("data ref:" + dataSnapshot.getRef()); 
     ......logic .... 

     } catch (Exception e) { 
      LOGGER.info("Error en recepcion de actualizaciones de firebase" + e.getMessage(), e); 
     } 
     } 


     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     LOGGER.error("The read failed: " + databaseError.getCode()); 
     } 

     @Override 
     public void onChildChanged(DataSnapshot arg0, String arg1) { 
     LOGGER.info("Uno de los hijos fue modificado"); 
     } 

     @Override 
     public void onChildMoved(DataSnapshot arg0, String arg1) { 
     LOGGER.info("Uno de los hijos fue reubicado"); 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 
     LOGGER.info("Uno de los hijos fue removido"); 
     } 
    }); 

それが一度に動作させるためにどのような方法があります:これは私がリスナーを作成するために豆を持っているコードはありますか?そうでない場合、私は何をすべきですか? (一つだけのコンテナを使用すると、それが有効な解決策ではない - が高いavailityに)

答えて

0

Firebase SDKが動作して自身の複数のインスタンスがあるかどうかを知る方法がありませんし、それらの間の座標です。あなたが見ているのは期待される行動です。データベース内の場所を1つだけ聞きたい場合は、インスタンスを1つだけ持つか、トランザクションを使用して複雑な方法でこの調整を自分で行う必要があります。ロジックを複製したい場合は、firebase-queueというノードプロジェクトが効果的にこの調整を実行します。

しかし、あなたはデータベースに一度変化当たりの実行に必要なバックエンドのロジックを持っている場合、あなたはそれを管理するためにCloud Functions for Firebaseを使用してオフにおそらくはるかに良いです。

関連する問題