2016-07-11 3 views
0

アクカーシャーディングを使用して、実行中のアクターをいくつかのノードに分散しています。これらのアクタは永続的で、データベースの内部状態を保持します。Akkaアクタークラスター内のシャード移行中の内部状態

ここで、各ノードで動作する「metrics actor」にActorRefを追加する必要があります。シャードの各アクタは、テレメトリデータをメトリックアクタに送信することになっています。これは、同じノード上でローカルに実行されている正しいメトリックアクタを選択する必要があります。理由は、メトリックアクターはデータピアノードを収集します。アクターの一部としてClusterShardingのinicialisationへの参照を

val mvMetrics : ActorRef = system.actorOf(MetricsActor("mv"), "mvMetrics")

、次に渡すオブジェクトを小道具:

今、私は(各ノード上で最初に実行)メイン方法でメトリック・アクターを作成するために考えていました:

ClusterSharding(system).start(
     typeName = shardName, 
     entityProps = MyShardActor.props(mvMetrics), 
     settings = ClusterShardingSettings(system), 
     extractEntityId = idExtractor, 
     extractShardId = shardResolver) 

私の質問は、このように作成されたアクターがノード間で移動するとどうなりますか?ノードA→Bから?ノードBの移行された小道具オブジェクトがノードAと同じままであるので、ActorRefは同じままであるため、新しく作成された俳優が元のノードAにメトリクスデータを送信することは想像できますか?

ありがとうございます。

答えて

1

ActorRef.pathを活用することはどうですか?各ノードに特定の方法で名前が付けられたアクタがあるとしたら、アクタはそのパスを使用して関連するメトリックアクタを動的に探します。

+0

私の2番目のアイデアは、監視俳優のノード依存の名前を持ち、それをShard Actorで動的に評価することです。私はちょうど誰かがこの問題を別の方法で解決したのか不思議です、私は本当にクラスタ内の移行中にシャード内で俳優の小道具がどのように処理されるかに興味があります:) –

関連する問題