Implementieren der Sicherung und Wiederherstellung von Reliable Actors
Hinweis
Microsoft empfiehlt die Verwendung von Regelmäßige Sicherungen und Wiederherstellungen für die Konfiguration der Datensicherung von Reliable Stateful Services und Reliable Actors.
Im folgenden Beispiel stellt der benutzerdefinierte Actordienst eine Methode zum Sichern von Actordaten bereit. Diese nutzt die Vorteile des Remoting-Listeners, der bereits in ActorService
enthalten ist:
public interface IMyActorService : IService
{
Task BackupActorsAsync();
}
class MyActorService : ActorService, IMyActorService
{
public MyActorService(StatefulServiceContext context, ActorTypeInformation typeInfo, Func<ActorBase> newActor)
: base(context, typeInfo, newActor)
{ }
public Task BackupActorsAsync()
{
return this.BackupAsync(new BackupDescription(PerformBackupAsync));
}
private async Task<bool> PerformBackupAsync(BackupInfo backupInfo, CancellationToken cancellationToken)
{
try
{
// store the contents of backupInfo.Directory
return true;
}
finally
{
Directory.Delete(backupInfo.Directory, recursive: true);
}
}
}
public interface MyActorService extends Service
{
CompletableFuture<?> backupActorsAsync();
}
class MyActorServiceImpl extends ActorService implements MyActorService
{
public MyActorService(StatefulServiceContext context, ActorTypeInformation typeInfo, Func<FabricActorService, ActorId, ActorBase> newActor)
{
super(context, typeInfo, newActor);
}
public CompletableFuture backupActorsAsync()
{
return this.backupAsync(new BackupDescription((backupInfo, cancellationToken) -> performBackupAsync(backupInfo, cancellationToken)));
}
private CompletableFuture<Boolean> performBackupAsync(BackupInfo backupInfo, CancellationToken cancellationToken)
{
try
{
// store the contents of backupInfo.Directory
return true;
}
finally
{
deleteDirectory(backupInfo.Directory)
}
}
void deleteDirectory(File file) {
File[] contents = file.listFiles();
if (contents != null) {
for (File f : contents) {
deleteDirectory(f);
}
}
file.delete();
}
}
In diesem Beispiel ist IMyActorService
ein Remotingvertrag, der IService
(C#) und Service
(Java) implementiert und dann durch MyActorService
implementiert wird. Durch das Hinzufügen dieses Remotingvertrags stehen die Methoden in IMyActorService
jetzt auch auf einem Client bereit, da ein Remotingproxy mit ActorServiceProxy
erstellt wird:
IMyActorService myActorServiceProxy = ActorServiceProxy.Create<IMyActorService>(
new Uri("fabric:/MyApp/MyService"), ActorId.CreateRandom());
await myActorServiceProxy.BackupActorsAsync();
MyActorService myActorServiceProxy = ActorServiceProxy.create(MyActorService.class,
new URI("fabric:/MyApp/MyService"), actorId);
myActorServiceProxy.backupActorsAsync();
Weitere Informationen zu Reliable Actors finden Sie in den folgenden Artikeln: