0

我对 AKKA.NET 将“SampleActor”制作为“CustomCluster”中的单例有一个有趣的问题。不会引发异常或警告。在调试过程中,我无法将 SampleActor 初始化为集群单例,即使在单元测试中,我也能够以完整路径毫无问题地将该 ActorRef 获取到该演员,但该演员似乎没有初始化(构造函数和其他“OnStart”类型的功能没有被击中。我已经尝试直接向参与者“告诉”消息,以普通方式使用它(如集群中的“OrdinaryActor”)它正在接收这些消息并且运行良好。通过代理发送消息并使用完整的actor ref路径不工作,我确信这是因为演员没有被初始化。

在这一点上我错过了什么?有完整的配置akka.cluster.singleton,我尝试了许多不同的方法。

private static ActorSystem _actorSystem;

....

_actorSystem = ActorSystem.Create("CustomCluster", systemSetup);
var me = ServiceProvider.GetService<IActorRef>();



_actorSystem.ActorOf(
                Props.Create(() => new OrdinaryActor(me)),
                nameof(OrdinaryActor));   //Joins Cluster no problems

ClusterSingletonManagerSettings settings =
               ClusterSingletonManagerSettings.Create( _actorSystem ).WithRole("worker");
           _actorSystem.ActorOf( ClusterSingletonManager.Props(
               Props.Create( () => new SampleActor(me)),
           PoisonPill.Instance, settings ), "SampleActorSingleton" );
           
ClusterSingletonProxySettings proxySettings =
               ClusterSingletonProxySettings.Create( _actorSystem ).WithRole( "worker" );
           _actorSystem.ActorOf( ClusterSingletonProxy.Props( "/user/SampleActorSingleton", proxySettings ), "SampleActorSingletonProxy");
//Initialization of 'SampleActor is not being hit, no exceptions, I am able to get Actor ref but it is not functional'
4

1 回答 1

0

@Sura98 你能显示代码SampleActor吗?

从我个人的经验来看,当这种情况发生时,即当参与者没有“初始化”时,很可能是SampleActor类访问级别不是public或者构造函数不是public

于 2022-02-10T09:24:14.253 回答