Implementowanie funkcji na poziomie usług w usłudze aktora
Jak opisano w temacie Service Layering, sama usługa aktora jest niezawodną usługą. Możesz napisać własną usługę pochodzącą z klasy ActorService
. Funkcje na poziomie usługi można również zaimplementować w taki sam sposób, jak w przypadku dziedziczenia usługi stanowej, na przykład:
- Tworzenie i przywracanie kopii zapasowej usługi.
- Udostępnione funkcje dla wszystkich aktorów, na przykład wyłącznika.
- Zdalne wywołania procedury dla samej usługi aktora i poszczególnych aktorów.
Korzystanie z usługi aktora
Wystąpienia aktora mają dostęp do usługi aktora, w której są uruchomione. Za pośrednictwem usługi aktora wystąpienia aktora mogą programowo uzyskać kontekst usługi. Kontekst usługi ma identyfikator partycji, nazwę usługi, nazwę aplikacji i inne informacje specyficzne dla platformy 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();
}
Podobnie jak wszystkie usługi Reliable Services, usługa aktora musi być zarejestrowana przy użyciu typu usługi w środowisku uruchomieniowym usługi Service Fabric. Aby usługa aktora uruchamiała wystąpienia aktora, typ aktora musi być również zarejestrowany w usłudze aktora. Metoda rejestracji ActorRuntime
wykonuje tę pracę dla aktorów. W najprostszym przypadku można zarejestrować typ aktora, a usługa aktora używa ustawień domyślnych.
static class Program
{
private static void Main()
{
ActorRuntime.RegisterActorAsync<MyActor>().GetAwaiter().GetResult();
Thread.Sleep(Timeout.Infinite);
}
}
Alternatywnie możesz użyć lambda dostarczonego przez metodę rejestracji, aby samodzielnie skonstruować usługę aktora. Następnie można skonfigurować usługę aktora i jawnie skonstruować wystąpienia aktora. Zależności można wstrzyknąć do aktora za pomocą jego konstruktora.
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 usługi aktora
Usługa aktora implementuje IActorService
(C#) lub ActorService
(Java), które z kolei implementują IService
(C#) lub Service
(Java). Ten interfejs jest używany przez komunikacji zdalnej usług Reliable Services, co umożliwia zdalne wywołania procedur metod usług. Zawiera metody na poziomie usługi, które mogą być wywoływane zdalnie za pośrednictwem komunikacji zdalnej usługi. Można go użyć do wyliczania i usuwania aktorów.
Usługa niestandardowego aktora
Korzystając z rejestracji aktora lambda, możesz zarejestrować własną usługę niestandardowego aktora pochodzącą z ActorService
(C#) i FabricActorService
(Java). Następnie możesz zaimplementować własną funkcjonalność na poziomie usługi, pisząc klasę usługi dziedziczą ActorService
(C#) lub FabricActorService
(Java). Usługa niestandardowego aktora dziedziczy wszystkie funkcje środowiska uruchomieniowego aktora z ActorService
(C#) lub FabricActorService
(Java). Może służyć do implementowania własnych metod usług.
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);
}
}
Implementowanie kopii zapasowej i przywracania aktora
Usługa niestandardowego aktora może uwidocznić metodę tworzenia kopii zapasowych danych aktora, korzystając z odbiornika komunikacji zdalnie już obecnej w ActorService
programie . Aby zapoznać się z przykładem, zobacz Tworzenie kopii zapasowych i przywracanie aktorów.
Aktor korzystający ze stosu komunikacji wirtualnej v2 (zgodnej z interfejsem)
Stos komunikacji wirtualnej V2 (zgodny z interfejsem, znany jako V2_1) ma wszystkie funkcje stosu komunikacji równorzędnej w wersji 2. Jego interfejs jest zgodny ze stosem komunikacji wirtualnej V1, ale nie jest zgodny z poprzednimi wersjami 2 i V1. Aby uaktualnić z wersji 1 do V2_1 bez wpływu na dostępność usługi, wykonaj kroki opisane w następnej sekcji.
Do korzystania ze stosu komunikacji zdalnie V2_1 wymagane są następujące zmiany:
Dodaj następujący atrybut zestawu w interfejsach aktora.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
Tworzenie i uaktualnianie projektów klienckich usługi aktora i aktora w celu rozpoczęcia korzystania ze stosu w wersji 2.
Uaktualnianie usługi aktora do stosu komunikacji równorzędnej w wersji 2 (zgodnej z interfejsem) bez wpływu na dostępność usługi
Ta zmiana jest uaktualnieniem dwuetapowym. Wykonaj kroki opisane w tej sekwencji.
Dodaj następujący atrybut zestawu w interfejsach aktora. Ten atrybut uruchamia dwa odbiorniki dla usługi aktora, V1 (istniejący) i odbiornik V2_1. Uaktualnij usługę aktora, zmieniając tę zmianę.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
Uaktualnij klientów aktora po zakończeniu poprzedniego uaktualnienia. Ten krok zapewnia, że serwer proxy aktora używa stosu komunikacji V2_1.
To krok jest opcjonalny. Zmień poprzedni atrybut, aby usunąć odbiornik V1.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
Aktor korzystający ze stosu komunikacji wirtualnej w wersji 2
Dzięki pakietowi NuGet w wersji 2.8 użytkownicy mogą teraz używać stosu komunikacji równorzędnej w wersji 2, który działa lepiej i udostępnia funkcje, takie jak serializacja niestandardowa. Komunikacja zdalna w wersji 2 nie jest zgodna z poprzednimi wersjami z istniejącym stosem komunikacji równorzędnej (obecnie nazywanym stosem komunikacji równorzędnej W1).
Następujące zmiany są wymagane do korzystania ze stosu komunikacji równorzędnej w wersji 2.
Dodaj następujący atrybut zestawu w interfejsach aktora.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
Skompiluj i uaktualnij projekty klienckie usługi aktora i aktora, aby rozpocząć korzystanie ze stosu w wersji 2.
Uaktualnianie usługi aktora do stosu komunikacji równorzędnej w wersji 2 bez wpływu na dostępność usługi
Ta zmiana jest uaktualnieniem dwuetapowym. Wykonaj kroki opisane w tej sekwencji.
Dodaj następujący atrybut zestawu w interfejsach aktora. Ten atrybut uruchamia dwa odbiorniki dla usługi aktora, V1 (istniejący) i odbiornik v2. Uaktualnij usługę aktora, zmieniając tę zmianę.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
Uaktualnij klientów aktora po zakończeniu poprzedniego uaktualnienia. Ten krok zapewnia, że serwer proxy aktora używa stosu komunikacji wirtualnej w wersji 2.
To krok jest opcjonalny. Zmień poprzedni atrybut, aby usunąć odbiornik V1.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]