Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Som standard tillåter Reliable Actors-körningen logisk anropskontextbaserad återinträde. Detta gör det möjligt för aktörer att återinträda om de finns i samma kallkontextkedja. Aktör A skickar till exempel ett meddelande till aktör B, som skickar ett meddelande till aktör C. Om aktör C anropar aktör A som en del av meddelandebearbetningen är meddelandet återaktivt, så det kommer att tillåtas. Alla andra meddelanden som ingår i en annan samtalskontext blockeras på aktör A tills bearbetningen är klar.
Det finns två alternativ tillgängliga för aktörers återinträde som definieras i ActorReentrancyMode
-uppräkningen.
-
LogicalCallContext
(standardbeteende) -
Disallowed
– inaktiverar återaktivering
public enum ActorReentrancyMode
{
LogicalCallContext = 1,
Disallowed = 2
}
public enum ActorReentrancyMode
{
LogicalCallContext(1),
Disallowed(2)
}
Återinträde kan konfigureras i ActorService
:s inställningar vid registreringen. Inställningen gäller för alla aktörsinstanser som skapats i aktörstjänsten.
I följande exempel demonstreras en aktörstjänst som konfigurerar återinträdesläget till ActorReentrancyMode.Disallowed
. Om en aktör i det här fallet skickar ett återaktiveringsmeddelande till en annan aktör genereras ett undantag av typen FabricException
.
static class Program
{
static void Main()
{
try
{
ActorRuntime.RegisterActorAsync<Actor1>(
(context, actorType) => new ActorService(
context,
actorType, () => new Actor1(),
settings: new ActorServiceSettings()
{
ActorConcurrencySettings = new ActorConcurrencySettings()
{
ReentrancyMode = ActorReentrancyMode.Disallowed
}
}))
.GetAwaiter().GetResult();
Thread.Sleep(Timeout.Infinite);
}
catch (Exception e)
{
ActorEventSource.Current.ActorHostInitializationFailed(e.ToString());
throw;
}
}
}
static class Program
{
static void Main()
{
try
{
ActorConcurrencySettings actorConcurrencySettings = new ActorConcurrencySettings();
actorConcurrencySettings.setReentrancyMode(ActorReentrancyMode.Disallowed);
ActorServiceSettings actorServiceSettings = new ActorServiceSettings();
actorServiceSettings.setActorConcurrencySettings(actorConcurrencySettings);
ActorRuntime.registerActorAsync(
Actor1.getClass(),
(context, actorType) -> new FabricActorService(
context,
actorType, () -> new Actor1(),
null,
stateProvider,
actorServiceSettings, timeout);
Thread.sleep(Long.MAX_VALUE);
}
catch (Exception e)
{
throw e;
}
}
}
Nästa steg
- Läs mer om återaktivering i referensdokumentationen för api för aktör)