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