Sdílet prostřednictvím


Implementace funkcí na úrovni služby actor

Jak je popsáno v vrstvení služby, samotná služba actor je spolehlivá služba. Můžete napsat vlastní službu, která je odvozena od ActorService. Funkce na úrovni služby můžete implementovat stejným způsobem jako při dědění stavové služby, například:

  • Zálohování a obnovení služby.
  • Sdílené funkce pro všechny aktéry, například jistič.
  • Vzdálená procedura volá samotnou službu objektu actor a každého jednotlivého aktéra.

Použití služby actor

Instance objektu actor mají přístup ke službě actor, ve které jsou spuštěné. Prostřednictvím služby objektu actor můžou instance objektu actor programově získat kontext služby. Kontext služby má ID oddílu, název služby, název aplikace a další informace specifické pro platformu Azure Service Fabric.

Task MyActorMethod()
{
    Guid partitionId = this.ActorService.Context.PartitionId;
    string serviceTypeName = this.ActorService.Context.ServiceTypeName;
    Uri serviceInstanceName = this.ActorService.Context.ServiceName;
    string applicationInstanceName = this.ActorService.Context.CodePackageActivationContext.ApplicationName;
}
CompletableFuture<?> MyActorMethod()
{
    UUID partitionId = this.getActorService().getServiceContext().getPartitionId();
    String serviceTypeName = this.getActorService().getServiceContext().getServiceTypeName();
    URI serviceInstanceName = this.getActorService().getServiceContext().getServiceName();
    String applicationInstanceName = this.getActorService().getServiceContext().getCodePackageActivationContext().getApplicationName();
}

Stejně jako všechny Reliable Services musí být služba actor zaregistrovaná s typem služby v modulu runtime Service Fabric. Aby služba actor spustila instance objektu actor, musí být typ objektu actor také registrován ve službě actor. Pro objekty actor tuto práci provádí metoda registrace ActorRuntime. V nejjednodušším případě můžete typ objektu actor zaregistrovat a služba actor pak použije výchozí nastavení.

static class Program
{
    private static void Main()
    {
        ActorRuntime.RegisterActorAsync<MyActor>().GetAwaiter().GetResult();

        Thread.Sleep(Timeout.Infinite);
    }
}

Alternativně můžete použít lambda poskytovanou metodou registrace k vytvoření služby actor sami. Pak můžete nakonfigurovat službu actor a explicitně sestavit instance objektu actor. Závislosti můžete do objektu actor vložit prostřednictvím jeho konstruktoru.

static class Program
{
    private static void Main()
    {
        ActorRuntime.RegisterActorAsync<MyActor>(
            (context, actorType) => new ActorService(context, actorType, () => new MyActor()))
            .GetAwaiter().GetResult();

        Thread.Sleep(Timeout.Infinite);
    }
}
static class Program
{
    private static void Main()
    {
      ActorRuntime.registerActorAsync(
              MyActor.class,
              (context, actorTypeInfo) -> new FabricActorService(context, actorTypeInfo),
              timeout);

        Thread.sleep(Long.MAX_VALUE);
    }
}

Metody služby Actor

Služba actor implementuje IActorService (C#) nebo ActorService (Java), která následně implementuje IService (C#) nebo Service (Java). Toto rozhraní používá vzdálená komunikace Reliable Services, která umožňuje vzdálená volání procedur metod služby. Obsahuje metody na úrovni služby, které lze volat vzdáleně prostřednictvím vzdálené komunikace služby. Můžete ho použít k vytvoření výčtu a odstranění objektů actor.

Služba vlastního objektu actor

Pomocí lambda registrace objektu actor můžete zaregistrovat vlastní službu objektu actor, která je odvozena od ActorService (C#) a FabricActorService (Java). Potom můžete implementovat vlastní funkce na úrovni služeb tím, že napíšete třídu služby, která dědí ActorService (C#) nebo FabricActorService (Java). Služba vlastního objektu actor dědí všechny funkce modulu runtime objektu actor z ActorService jazyka (C#) nebo FabricActorService (Java). Dá se použít k implementaci vlastních metod služby.

class MyActorService : ActorService
{
    public MyActorService(StatefulServiceContext context, ActorTypeInformation typeInfo, Func<ActorBase> newActor)
        : base(context, typeInfo, newActor)
    { }
}
class MyActorService extends FabricActorService
{
    public MyActorService(StatefulServiceContext context, ActorTypeInformation typeInfo, BiFunction<FabricActorService, ActorId, ActorBase> newActor)
    {
         super(context, typeInfo, newActor);
    }
}
static class Program
{
    private static void Main()
    {
        ActorRuntime.RegisterActorAsync<MyActor>(
            (context, actorType) => new MyActorService(context, actorType, () => new MyActor()))
            .GetAwaiter().GetResult();

        Thread.Sleep(Timeout.Infinite);
    }
}
public class Program
{
    public static void main(String[] args)
    {
        ActorRuntime.registerActorAsync(
                MyActor.class,
                (context, actorTypeInfo) -> new FabricActorService(context, actorTypeInfo),
                timeout);
        Thread.sleep(Long.MAX_VALUE);
    }
}

Implementace zálohování a obnovení objektu actor

Služba vlastního objektu actor může vystavit metodu pro zálohování dat objektu actor tím, že využívá naslouchací proces vzdálené komunikace, který již existuje .ActorService Příklad najdete v tématu Zálohování a obnovení objektů actor.

Objekt actor, který používá zásobník vzdálené komunikace V2 (kompatibilní s rozhraním)

Zásobník vzdálené komunikace V2 (kompatibilní s rozhraním označovaný jako V2_1) má všechny funkce zásobníku vzdálené komunikace V2. Jeho rozhraní je kompatibilní se zásobníkem vzdálené komunikace V1, ale není zpětně kompatibilní s V2 a V1. Pokud chcete upgradovat z verze 1 na V2_1 bez vlivu na dostupnost služby, postupujte podle kroků v další části.

K použití vzdálené komunikace V2_1 zásobníku se vyžadují následující změny:

  1. Do rozhraní objektu actor přidejte následující atribut sestavení.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
    
  2. Sestavte a upgradujte klientské projekty služby actor a objektu actor, abyste mohli začít používat zásobník V2.

Upgrade služby Actor na zásobník vzdálené komunikace V2 (kompatibilní s rozhraním) bez ovlivnění dostupnosti služby

Tato změna je dvoustupňový upgrade. Postupujte podle kroků v této sekvenci.

  1. Do rozhraní objektu actor přidejte následující atribut sestavení. Tento atribut spustí dva naslouchací procesy pro službu actor, V1 (existující) a naslouchací proces V2_1. Upgradujte službu actor touto změnou.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
    
  2. Po dokončení předchozího upgradu upgradujte klienty objektu actor. Tento krok zajistí, že proxy objektu actor používá vzdálené komunikace V2_1 zásobníku.

  3. Tento krok je nepovinný. Změňte předchozí atribut a odeberte naslouchací proces V1.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
    

Objekt actor, který používá zásobník vzdálené komunikace V2

S balíčkem NuGet verze 2.8 teď můžou uživatelé používat zásobník vzdálené komunikace V2, který funguje lépe a poskytuje funkce, jako je vlastní serializace. Vzdálené komunikace V2 není zpětně kompatibilní s existujícím zásobníkem vzdálené komunikace (nyní se nazývá zásobník vzdálené komunikace V1).

Pro použití zásobníku vzdálené komunikace V2 jsou potřeba následující změny.

  1. Do rozhraní objektu actor přidejte následující atribut sestavení.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
    
  2. Sestavte a upgradujte klientské projekty služby actor a objektu actor, abyste mohli začít používat zásobník V2.

Upgrade služby actor na zásobník vzdálené komunikace V2 bez ovlivnění dostupnosti služby

Tato změna je dvoustupňový upgrade. Postupujte podle kroků v této sekvenci.

  1. Do rozhraní objektu actor přidejte následující atribut sestavení. Tento atribut spustí dva naslouchací procesy pro službu actor, V1 (existující) a naslouchací proces V2. Upgradujte službu actor touto změnou.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
    
  2. Po dokončení předchozího upgradu upgradujte klienty objektu actor. Tento krok zajistí, že proxy objektu actor používá zásobník vzdálené komunikace V2.

  3. Tento krok je nepovinný. Změňte předchozí atribut a odeberte naslouchací proces V1.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
    

Další kroky