Azure service fabric 在不同的参与者类型之间共享状态

Azure service fabric 在不同的参与者类型之间共享状态,azure-service-fabric,Azure Service Fabric,我在一个项目中创建了两个Actor Actor1和Actor2,并在Program.cs中注册了它们: ActorRuntime.RegisterActorAsync<Actor1>(); ActorRuntime.RegisterActorAsync<Actor2>(); ActorRuntime.RegisterActorAsync(); RegisterActorAsync(); 但在运行时,我看到它们都托管在单独的Actor服务中。当我通过Actor1中的St

我在一个项目中创建了两个Actor Actor1和Actor2,并在Program.cs中注册了它们:

ActorRuntime.RegisterActorAsync<Actor1>();
ActorRuntime.RegisterActorAsync<Actor2>();
ActorRuntime.RegisterActorAsync();
RegisterActorAsync();
但在运行时,我看到它们都托管在单独的Actor服务中。当我通过Actor1中的StateManager将一些数据保存在可靠集合中时,Actor2无法使用此状态


是否可以在不同的参与者类型之间共享状态?

首先,看起来您使用参与者的方式不对。您应该为每个主机进程注册一个参与者类型。比如说

ActorRuntime.RegisterActorAsync<Actor1>((context, actorType) => 
                    new ActorService(
                        context, 
                        actorType,
                        () => new Actor1()))
.GetAwaiter()
.GetResult();
var actor1Proxy = ActorProxy.Create<IActor1>(actorId, new Uri("fabric:/MyApp/Actor1"));
var actor2Proxy = ActorProxy.Create<IActor2>(actorId, new Uri("fabric:/MyApp/Actor2"));

actor1Proxy.SaveData(data);
actor2Proxy.SaveData(data);

ActorRuntime.RegisterActorAsync和文章,了解有关如何使用Actor的更多信息。

首先,看起来您使用Actor的方式不对。您应该为每个主机进程注册一个参与者类型。比如说

ActorRuntime.RegisterActorAsync<Actor1>((context, actorType) => 
                    new ActorService(
                        context, 
                        actorType,
                        () => new Actor1()))
.GetAwaiter()
.GetResult();
var actor1Proxy = ActorProxy.Create<IActor1>(actorId, new Uri("fabric:/MyApp/Actor1"));
var actor2Proxy = ActorProxy.Create<IActor2>(actorId, new Uri("fabric:/MyApp/Actor2"));

actor1Proxy.SaveData(data);
actor2Proxy.SaveData(data);

ActorRuntime.RegisterActorAsync和文章,了解有关如何使用Actor的更多信息。

是的,一般来说,您应该在不同的进程中托管Actor,因为您可以独立于其他进程进行升级。但是,您可以在同一进程中托管多个参与者类型。@VipulM MSFT是的,我们甚至对此有所了解。是的,一般来说,您应该在不同的进程中托管参与者,因为您可以独立于其他进程进行升级。但是,您可以在同一个过程中托管多个演员类型。@VipulM MSFT是的,我们甚至对此有所了解。