クラスター内のアクター間の通信に問題があります。
私のテストプロジェクトには、以下の構造があります。
TestJob [C# コンソール プロジェクト]
- TestJobService.cs
- TestJobActor
MainProject [C# コンソール プロジェクト] //注: このサービスをシード ノードとして構成しました。灯台は使いませんでした。
- MainService
- JobManagerActor
注: アクターを共有プロジェクトまたはメイン プロジェクトに配置したくありません。テスト ジョブを実行することになっているアクターは、「TestJob」プロジェクトの下にある必要があります。
私はすでにこの記事http://getakka.net/docs/clustering/cluster-overviewとビデオをフォローしています。記事に基づいて Akka.Cluster を有効にしました。両方のコンソール プロジェクトを実行できますが、JobManagerActor から TestJobActor に「指示」しようとすると、機能しません。エラーはありませんが、動作しません。
MainProject にこの構成があります。
actor {
provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
deployment {
/TestJobAActor {
router = consistent-hashing-group
routees.paths = ["/user/TestJobAActor"]
virtual-nodes-factor = 8
cluster {
enabled = on
max-nr-of-instances-per-node = 2
allow-local-routees = off
use-role = backend
}
}
}
}
メッセージの送信に使用するコードは次のとおりです。
var backendRouter = Context.ActorOf(Props.Empty.WithRouter(new ClusterRouterGroup(new ConsistentHashingGroup("/user/TestJobAActor"),new ClusterRouterGroupSettings(10, false, "backend", ImmutableHashSet.Create("/user/TestJobAActor")))));
backendRouter.Tell("Yo yo!");
私は何が欠けていますか?前もって感謝します。
注: 同様の構造を持つ私のテスト プロジェクトは、https://github.com/michaelsync/APMDemoにあります。(VS2015 プロジェクト)
もう 1 つ質問があります。クラスターを使用している場合でも、アクターの選択を使用できますか?
var actorSelection = Context.ActorSelection("akka.tcp://MyBackendProcessingSystem@127.0.0.1:2553/user/BackEndJobAActor"); //This can come from Model
actorSelection.Tell("Yo yo!");