2017-06-18 12 views
0

私はScala 2.12.2でAkka 2.5.2を使用しています。Akka ShardRegion.StartEntityメッセージはエンティティアクタに伝播されますか?

sharding docには、クラッシュ/リバランスされた断片をエンティティを回復するために、がShardRegion.StartEntityメッセージを処理する必要があることが記載されています。

エンティティ自体が内部状態を回復する必要がある場合は、PersistenceActorを実装する必要があります。これを機能させるには、エンティティに固有のpersistenceIdが必要です。

エンティティが再起動されると、問題はどのようにしてpersistenceIdが見つけられますか?これはShardRegion俳優によって渡されますか?

答えて

1

いいえ:シャードされた俳優は、ローカルノードの領域で消費されるStartEntityメッセージを受信しません(afaik)。

persistenceIdはPersistentActor特性からオーバーライドするものです。安定した(つまり、常に再起動しても同じように)方法で自分自身を定義する必要があります。

通常は、あなたが実体識別子と同じになるようにpersistenceIdを結ぶ、これは確認することで周り後者は、あなたが正常に行きself().path().name()

一つの方法で俳優の名前から取得できるすべてのメッセージ"エンベロープ"クラスでラップされるか、(extractorが使用するものと同じである)sortのentityIdを公開することによってentityIdを含むシャードされたアクタに送られます。

+0

ご清聴ありがとうございます。問題は、エンティティが開始されるとき(例えば、外部リソースのハートビートを監視する)、メッセージが受信される前に、何らかの内部作業を開始する必要があるということである。この場合、 'self()。path()。name()'アプローチが唯一の解決策かもしれないと思います。 – stackoverflower

+0

幸いにも 'persistenceId'は' def'であり、 'val'ではありません – stackoverflower