Reliable Actors-återaktivering
Reliable Actors-körningen tillåter som standard kontextbaserad klientorganisation för logiska anrop. Detta gör det möjligt för aktörer att återaktiveras om de befinner sig i samma samtalskontextkedja. Till exempel skickar aktör A ett meddelande till aktör B, som skickar ett meddelande till aktör C. Som en del av meddelandebearbetningen, om aktör C anropar aktör A, är meddelandet återaktivt, så det kommer att tillåtas. Alla andra meddelanden som ingår i en annan anropskontext blockeras på aktör A tills bearbetningen är klar.
Det finns två alternativ för aktörsreentitet som definierats i ActorReentrancyMode
uppräkningen:
LogicalCallContext
(standardbeteende)Disallowed
– inaktiverar återaktivering
public enum ActorReentrancyMode
{
LogicalCallContext = 1,
Disallowed = 2
}
public enum ActorReentrancyMode
{
LogicalCallContext(1),
Disallowed(2)
}
Återaktivering kan konfigureras i ActorService
inställningarna under registreringen. Inställningen gäller för alla aktörsinstanser som skapats i aktörstjänsten.
I följande exempel visas en aktörstjänst som anger återaktiveringsläget till ActorReentrancyMode.Disallowed
. Om en aktör i det här fallet skickar ett meddelande 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 aktörs-API:et)
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för