Reliable Actors 다시 표시
기본적으로 Reliable Actors 런타임을 사용하면 논리적 호출 컨텍스트를 기반으로 다시 표시할 수 있습니다. 따라서 동일한 호출 컨텍스트 체인에 있는 경우 행위자가 다시 표시되도록 할 수 있습니다. 예를 들어 행위자 A가 행위자 C에 메시지를 보내는 행위자 B에 메시지를 보내는 경우 메시지 처리 과정의 일부로 행위자 C가 행위자 A를 호출하면 해당 메시지가 다시 표시됩니다. 다른 호출 컨텍스트의 일부인 다른 모든 메시지는 처리를 완료할 때까지 행위자 A에서 차단됩니다.
ActorReentrancyMode
열거에 정의된 행위자 다시 표시에 두 개의 옵션을 사용할 수 있습니다.
LogicalCallContext
(기본 동작)Disallowed
- 다시 표시 비활성화
public enum ActorReentrancyMode
{
LogicalCallContext = 1,
Disallowed = 2
}
public enum ActorReentrancyMode
{
LogicalCallContext(1),
Disallowed(2)
}
다시 표시는 등록하는 동안 ActorService
의 설정에서 구성될 수 있습니다. 행위자 서비스에서 만든 모든 행위자 인스턴스에 설정이 적용됩니다.
다음 예제에서는 다시 표시 모드를 ActorReentrancyMode.Disallowed
로 설정하는 행위자 서비스를 보여 줍니다. 이 경우, 행위자가 다시 표시 메시지를 다른 행위자에게 보내면 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;
}
}
}
다음 단계
- 행위자 API 참조 설명서에서 다시 표시에 대해 자세히 알아봅니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기