Azure Service Fabric - 克隆状态的Actors

时间:2018-04-06 16:21:30

标签: azure-service-fabric stateful-actor-service

有没有办法克隆一个actor及其状态并创建完全相同的actor,在Azure Service Fabric中的另一个应用程序中具有相同的actor Id及其相应的状态?我查看了备份和恢复,但它似乎没有做我需要的。
我们在生产中有几个运行actor的相同应用程序类型的实例。我们需要此功能有两个原因: 1.我们需要将两个应用程序合并为一个,因此所有的actor都需要在当前状态下以其他实例中的当前ID重新创建。 2。我们希望能够将生产克隆到QA环境中,该环境位于不同的Azure服务器上,因此我们可以在生产所处的准确状态下测试升级和新代码。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

我不认为有内置的克隆支持。但我相信你可以实现自己的机制来做到这一点 - 你可以迭代你的演员来获得他们的状态,然后将它传递给另一个cluser。 迭代:

` 
        var cancellationToken = new CancellationToken();
        ContinuationToken continuationToken = null;
        var actorProxyFactory = new ActorProxyFactory();
        var actorServiceProxy = ActorServiceProxy.Create("fabric:/MyActorApp/MyActorService", partitionKey);

        do
        {
            var queryResult = await actorServiceProxy.GetActorsAsync(continuationToken, cancellationToken);
            foreach (var item in queryResult.Items)
            {
                var actor = actorProxyFactory.CreateActorProxy<IMyActor>("fabric:/MyActorApp/MyActorService", item.ActorId);
                var state = await actor.GetState();
            }

            continuationToken = queryResult.ContinuationToken;
        } while (continuationToken != null);
`

如果您有一个动态名称的动态列表,您可以使用GetStateNamesAsync方法获取所有名称:

IEnumerable<string> stateNames = await StateManager.GetStateNamesAsync();

希望这会有所帮助。

答案 1 :(得分:0)

对于#1,您需要使用Alex's solution或类似的。

对于#2,您可以使用现有的backup & restore机制。要还原的服务的目标分区不需要是created the backup of的源分区。