2016-04-19 7 views
2

私はConsistentHashingPoolのルータを使用して、この単純なケースではユニークな文字列であるオブジェクトIDに基づいてメッセージを消費するためにその場でアクターを作成しようとしています。ドメインオブジェクトごとにアクターを作成する

私はドメインごとのアクターを集約したいと思います。これは本当に簡単な方法です。

しかし、ハッシュは奇妙なことをしていて、既に別のハッシュマッピング値から生成されたアクターにメッセージを送信しているようです。

ActorSystem.ActorOf(
    Props.Create(() => new MyAggergateActor()).WithRouter(
     new ConsistentHashingPool(10) 
     .WithHashMapping(o => (o as MyEvent)?.MyAggregateUniqueId ?? string.Empty) 
     .WithResizer(new DefaultResizer(1, int.MaxValue))), 
    "myAggregateRouter"); 

nrOfInstancesから値を微調整することは、おそらく唯一の最初のインスタンスのセットにわたって動作し、新しい俳優が生み出されていないされているハッシュを意味するだけでなく、物事を破るように見えますか?私はresizerがここで私を助けるはずだったと思った?

私はAkkaを使い始めたばかりです。

答えて

5

ここで重要なのは、ルータが本当に何をするのかを理解することです。一貫したハッシュの意味は、すべての可能な一貫したハッシュ値の範囲であり、ルータのプール内の各アクターは、の範囲の可能性のある範囲のハッシュ範囲を処理する責任があります。

たとえば、一貫性のあるハッシュが可能な範囲の1〜100の値の1つで、10人のアクターのプールを持つ一貫性のあるハッシングルーターで、1-10のハッシュを含むメッセージを第1アクター、プールのサイズを変更すると、それらのハッシュ範囲はプール内の各アクタに再調整されます。この場合、プールを20人のアクタにリサイズした後、最初は今すぐになります1から5までの範囲、2番目の6から10までなど

アクターを作成してエンティティIDに基づいてメッセージをルーティングする場合は、探しているものがAkka.Cluster.Sharding

+0

私はakka.clusterとシャーディングが私のアプリケーションにとっては全く残虐ではないと思います。また、しかし、私は正方形の穴に丸いペグを使用することによって賢明にしようとしていたと思う。今私はルータを少し良く理解しています(あなたの返事のおかげで)私は自分のやり方の誤りを認識します。アクターを使ってインスタンスを管理し、メッセージを正しいインスタンスに転送するだけです。 – tigerswithguitars

関連する問題