Reliable Actors újrabehelyeztetés
A Reliable Actors futtatókörnyezete alapértelmezés szerint lehetővé teszi a logikai hívások környezetalapú újrabetöltését. Ez lehetővé teszi az aktorok újraküldését, ha ugyanabban a híváskörnyezeti láncban vannak. Az A aktor például üzenetet küld a B aktornak, aki üzenetet küld a C aktornak. Az üzenetfeldolgozás részeként, ha a C színész meghívja az A aktort, az üzenet újraküldésre kerül, így engedélyezve lesz. A más hívási környezet részét képező egyéb üzenetek mindaddig le lesznek tiltva az A aktoron, amíg be nem fejeződik a feldolgozás.
Az enumerálásban két lehetőség érhető el az aktor újbóli belépéséhez ActorReentrancyMode
:
LogicalCallContext
(alapértelmezett viselkedés)Disallowed
- letiltja az újbóli belépést
public enum ActorReentrancyMode
{
LogicalCallContext = 1,
Disallowed = 2
}
public enum ActorReentrancyMode
{
LogicalCallContext(1),
Disallowed(2)
}
Az újrabemeneti beállítások a ActorService
regisztráció során konfigurálhatók. A beállítás az aktorszolgáltatásban létrehozott összes aktorpéldányra vonatkozik.
Az alábbi példa egy aktorszolgáltatást mutat be, amely a reentrancy módot értékre ActorReentrancyMode.Disallowed
állítja. Ebben az esetben, ha egy szereplő újraküldési üzenetet küld egy másik szereplőnek, a rendszer kivételt küld a típusból 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;
}
}
}
Következő lépések
- További információ az újbóli regisztrációról az Aktor API referenciadokumentációjában)
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: