Szolgáltatásszintű funkciók implementálása az aktorszolgáltatásban
A szolgáltatásrétegezésben leírtak szerint maga az aktorszolgáltatás egy megbízható szolgáltatás. A saját szolgáltatását is megírhatja, amely a forrásból ActorService
származik. A szolgáltatásszintű funkciókat ugyanúgy implementálhatja, mint egy állapotalapú szolgáltatás öröklésekor, például:
- Szolgáltatás biztonsági mentése és visszaállítása.
- Megosztott funkciók az összes szereplőhöz, például egy megszakítóhoz.
- A távoli eljárás meghívja magát az aktorszolgáltatást és az egyes szereplőket.
Az aktorszolgáltatás használata
A színészpéldányok hozzáféréssel rendelkeznek ahhoz az aktorszolgáltatáshoz, amelyben futnak. Az aktorszolgáltatáson keresztül a színészpéldányok programozott módon szerezhetik be a szolgáltatáskörnyezetet. A szolgáltatáskörnyezet rendelkezik a partícióazonosítóval, a szolgáltatás nevével, az alkalmazás nevével és más Azure Service Fabric-platformspecifikus információkkal.
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();
}
A Reliable Serviceshez hasonlóan az aktorszolgáltatást is regisztrálni kell egy szolgáltatástípussal a Service Fabric-futtatókörnyezetben. Ahhoz, hogy az aktorszolgáltatás futtathassa a színészpéldányokat, a színész típusát is regisztrálnia kell az aktorszolgáltatásban. Az aktorok esetében ezt a feladatot az ActorRuntime
regisztrációs metódus végzi el. A legegyszerűbb esetben regisztrálhatja a színész típusát, és az aktor szolgáltatás ezután az alapértelmezett beállításokat használja.
static class Program
{
private static void Main()
{
ActorRuntime.RegisterActorAsync<MyActor>().GetAwaiter().GetResult();
Thread.Sleep(Timeout.Infinite);
}
}
Másik lehetőségként használhatja a regisztrációs módszer által biztosított lambdát az aktorszolgáltatás létrehozására. Ezután konfigurálhatja az aktorszolgáltatást, és explicit módon létrehozhatja a színészpéldányokat. A konstruktoron keresztül függőségeket szúrhat be a színésznek.
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);
}
}
Aktorszolgáltatás módszerei
Az aktorszolgáltatás implementálja IActorService
a (C#) vagy ActorService
a (Java) szolgáltatást, amely viszont implementálja IService
a (C#) vagy Service
a (Java) műveletet. Ezt a felületet használja a Reliable Services újrametszetelése, amely lehetővé teszi a távoli eljáráshívásokat a szolgáltatás metódusaihoz. Szolgáltatásszintű metódusokat tartalmaz, amelyeket távolról lehet meghívni szolgáltatás-újraküldéssel. Segítségével számba vehet és törölhet szereplőket.
Egyéni aktorszolgáltatás
Az aktorregisztrációs lambda használatával regisztrálhatja saját egyéni aktorszolgáltatását, amely a (C#) és FabricActorService
a (Java) függvényből ActorService
származik. Ezt követően saját szolgáltatásszintű funkciókat valósíthat meg egy öröklő ActorService
(C#) vagy FabricActorService
(Java) szolgáltatásosztály megírásával. Az egyéni aktorszolgáltatás a (C#) vagy FabricActorService
a (Java) összes aktor-futtatókörnyezeti funkcióját ActorService
örökli. Használható saját szolgáltatási módszerek implementálásához.
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);
}
}
Aktor biztonsági mentésének és visszaállításának implementálása
Az egyéni aktorszolgáltatás a már meglévő ActorService
átnevező figyelő kihasználásával közzétehet egy módszert a színészadatok biztonsági mentésére. Példa: Backup and restore actors.
Remoting V2 (interfészkompatibilis) vermet használó aktor
A V2 -remoting V2 (interfészkompatibilis, más néven V2_1) verem tartalmazza a V2-remoting verem összes funkcióját. A felülete kompatibilis az újraegyesítő V1 veremmel, de nem kompatibilis a V2 és az 1. virtuális géppel. Ha az 1- es verzióról V2_1 szeretne frissíteni, és nincs hatással a szolgáltatás rendelkezésre állására, kövesse a következő szakasz lépéseit.
Az újraegyenlítő V2_1 verem használatához a következő módosítások szükségesek:
Adja hozzá a következő szerelvényattribútumot az aktor-felületekhez.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
Az aktorszolgáltatás- és aktor-ügyfélprojektek létrehozása és frissítése a V2-verem használatának megkezdéséhez.
Az aktorszolgáltatás frissítése a V2 (interfészkompatibilis) verem újrahangolására a szolgáltatás rendelkezésre állásának befolyásolása nélkül
Ez a módosítás kétlépéses frissítés. Kövesse a sorozat lépéseit.
Adja hozzá a következő szerelvényattribútumot az aktor-felületekhez. Ez az attribútum két figyelőt indít el az aktorszolgáltatás, a V1 (meglévő) és a V2_1 figyelő számára. Ezzel a módosítással frissítse az aktorszolgáltatást.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
Frissítse az aktor-ügyfeleket az előző frissítés befejezése után. Ez a lépés gondoskodik arról, hogy az aktorproxy az újrametszési V2_1 vermet használja.
Ez a lépés nem kötelező. Módosítsa az előző attribútumot a V1 figyelő eltávolításához.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
A V2-vermet használó színész
A 2.8-os NuGet-csomaggal a felhasználók most már használhatják az újrahangoló V2 vermet, amely jobb teljesítményt nyújt, és olyan funkciókat biztosít, mint az egyéni szerializálás. A V2 újraküldése nem kompatibilis a meglévő újrametszési veremmel (amelyet most V1-remoting veremnek nevezünk).
Az újraegyensúlyozási V2-verem használatához a következő módosítások szükségesek.
Adja hozzá a következő szerelvényattribútumot az aktor-felületekhez.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
Az aktorszolgáltatás és az aktor ügyfélprojektjének létrehozása és frissítése a V2-verem használatának megkezdéséhez.
Az aktorszolgáltatás frissítése az újraegyesítő V2-veremre a szolgáltatás rendelkezésre állásának befolyásolása nélkül
Ez a módosítás kétlépéses frissítés. Kövesse a sorozat lépéseit.
Adja hozzá a következő szerelvényattribútumot az aktor-felületekhez. Ez az attribútum két figyelőt indít el az aktorszolgáltatás, a V1 (meglévő) és a V2 figyelő számára. Ezzel a módosítással frissítse az aktorszolgáltatást.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
Frissítse az aktor-ügyfeleket az előző frissítés befejezése után. Ez a lépés gondoskodik arról, hogy az aktorproxy a V2-vermet használja.
Ez a lépés nem kötelező. Módosítsa az előző attribútumot a V1 figyelő eltávolításához.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]