Sdílet prostřednictvím


Implementace funkcí na úrovni služeb ve službě actor

Jak je popsáno v tématu o vrstvení služeb, služba actor je sama o sobě spolehlivou službou. Můžete napsat vlastní službu, která je odvozena z ActorService. Funkce na úrovni služby můžete implementovat stejným způsobem, jako když dědíte stavovou službu, 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 actor mohou instance objektu actor programově získat kontext služby. Kontext služby obsahuje 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 služby Reliable Services musí být služba actor zaregistrovaná s typem služby v modulu runtime Service Fabric. Aby služba actor spouštět instance objektu actor, musí být ve službě actor zaregistrovaný také váš typ objektu actor. Pro objekty actor tuto práci provádí metoda registrace ActorRuntime. V nejjednodušším případě můžete zaregistrovat typ objektu actor 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);
    }
}

Případně můžete použít lambda poskytovanou metodou registrace k vytvoření služby actor sami. Pak můžete nakonfigurovat službu actor a explicitně vytvořit instance objektu actor. Do objektu actor můžete vložit závislosti 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á pak implementuje IService (C#) nebo Service (Java). Toto rozhraní používá vzdálená komunikace Reliable Services, která umožňuje vzdálená volání procedur na metodách 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 výčtu a odstranění herců.

Služba vlastního objektu actor

Pomocí lambdy pro registraci objektu actor můžete zaregistrovat vlastní službu actor, která je odvozena z ActorService jazyka (C#) a FabricActorService (Java). Pak 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 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 zveřejnit metodu zálohování dat objektu actor s využitím naslouchacího procesu vzdálené komunikace, který už je v ActorServiceobjektu . Příklad najdete v tématu Zálohování a obnovení herců.

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 verzemi V2 a V1. Pokud chcete upgradovat z verze V1 na V2_1 bez dopadu na dostupnost služby, postupujte podle kroků v další části.

K použití zásobníku vzdálené komunikace V2_1 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), aniž by to mělo vliv na dostupnost služby

Tato změna je dvoustupňový upgrade. Postupujte podle kroků v tomto pořadí.

  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 V2_1 naslouchací proces. Upgradujte službu actor pomocí této změny.

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

  3. Tento krok je volitelný. Změnou předchozího atributu 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).

K použití zásobníku vzdálené komunikace V2 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,RemotingClientVersion = RemotingClientVersion.V2)]
    
  2. Sestavte a upgradujte klientské projekty služby actor a objektu actor, abyste mohli začít používat zásobník verze 2.

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 tomto pořadí.

  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 pomocí této změny.

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

  3. Tento krok je volitelný. Změnou předchozího atributu odeberte naslouchací proces V1.

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

Další kroky