Azure Service Fabric - 克隆具有状态的参与者
Azure Service Fabric - Clone Actors with state
有没有什么方法可以克隆一个参与者及其状态,并在 Azure Service Fabric 的另一个应用程序中创建完全相同的参与者,具有相同的参与者 ID 及其相应的状态?我查看了备份和恢复,但它似乎没有满足我的需要。
我们在生产中有多个相同应用程序类型 运行 参与者的实例。我们需要这个功能有两个原因:
1. 我们需要将 2 个应用程序合并为一个,因此所有参与者都需要在当前状态下使用另一个实例中的当前 ID 重新创建。
2.我们希望能够将生产克隆到 QA 环境中,该环境位于不同的 Azure 服务器上,因此我们可以在生产所处的确切状态下测试升级和新代码。
非常感谢任何帮助!
我认为 built-in 不支持克隆。但我相信你可以实现你自己的机制来做到这一点——你可以遍历你的演员来获得他们的状态,然后将它传递给另一个 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,您需要使用 或类似的。
对于#2,您可以使用现有的backup & restore mechanism. The target partition of a service you are restoring doesn't need to be the source partition you created the backup of。
有没有什么方法可以克隆一个参与者及其状态,并在 Azure Service Fabric 的另一个应用程序中创建完全相同的参与者,具有相同的参与者 ID 及其相应的状态?我查看了备份和恢复,但它似乎没有满足我的需要。
我们在生产中有多个相同应用程序类型 运行 参与者的实例。我们需要这个功能有两个原因:
1. 我们需要将 2 个应用程序合并为一个,因此所有参与者都需要在当前状态下使用另一个实例中的当前 ID 重新创建。
2.我们希望能够将生产克隆到 QA 环境中,该环境位于不同的 Azure 服务器上,因此我们可以在生产所处的确切状态下测试升级和新代码。
非常感谢任何帮助!
我认为 built-in 不支持克隆。但我相信你可以实现你自己的机制来做到这一点——你可以遍历你的演员来获得他们的状态,然后将它传递给另一个 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,您需要使用
对于#2,您可以使用现有的backup & restore mechanism. The target partition of a service you are restoring doesn't need to be the source partition you created the backup of。