서비스 계층화에 설명된 대로 행위자 서비스 자체는 신뢰할 수 있는 서비스입니다.
ActorService
에서 파생되는 고유의 서비스를 직접 작성할 수 있습니다. 상태 저장 서비스를 상속할 때 사용하는 것과 같은 방식으로 서비스 수준 기능을 구현할 수도 있습니다.
- 서비스 백업 및 복원
- 모든 행위자에 대한 공유 기능(예: 회로 차단기)
- 행위자 서비스 자체 및 각 개별 행위자에서의 원격 프로시저 호출
행위자 서비스 사용
행위자 인스턴스는 실행 중인 행위자 서비스에 액세스할 수 있습니다. 행위자 서비스를 통해 행위자 인스턴스는 프로그래밍 방식으로 서비스 컨텍스트를 가져올 수 있습니다. 서비스 컨텍스트에는 파티션 ID, 서비스 이름, 애플리케이션 이름 및 기타 Azure Service Fabric 플랫폼 관련 정보가 있습니다.
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();
}
모든 Reliable Services와 마찬가지로 행위자 서비스는 Service Fabric 런타임의 서비스 유형에 등록되어야 합니다. 행위자 서비스가 행위자 인스턴스를 실행하려면 행위자 유형도 행위자 서비스에 등록해야 합니다.
ActorRuntime
등록 메서드가 행위자에 대한 이 작업을 수행합니다. 가장 간단한 경우 행위자 유형을 등록할 수 있으며 행위자 서비스는 기본 설정을 사용합니다.
static class Program
{
private static void Main()
{
ActorRuntime.RegisterActorAsync<MyActor>().GetAwaiter().GetResult();
Thread.Sleep(Timeout.Infinite);
}
}
또는 등록 메서드에서 제공하는 람다를 사용하여 행위자 서비스를 직접 생성할 수 있습니다. 그런 다음 행위자 서비스를 구성하고 행위자 인스턴스를 명시적으로 구성할 수 있습니다. 해당 생성자를 통해 행위자에 종속성을 삽입할 수 있습니다.
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);
}
}
행위자 서비스 메서드
행위자 서비스를 구성하는 IActorService
(C#) 또는 ActorService
(Java)는 각각 IService
(C#) 또는 Service
(Java)를 구현합니다. 이 인터페이스는 서비스 메서드에 대한 원격 프로시저 호출을 허용하는 Reliable Services의 원격 호출 기능에서 사용됩니다. 서비스 리모팅을 통해 원격으로 호출할 수 있는 서비스 수준의 메서드가 포함되어 있습니다. 행위자를 열거 하고 삭제 하는 데 사용할 수 있습니다.
사용자 지정 행위자 서비스
행위자 등록 람다를 사용하여 (C#) 및 FabricActorService
(Java)에서 ActorService
파생된 사용자 지정 행위자 서비스를 등록할 수 있습니다. 그런 다음 ActorService
(C#) 또는 FabricActorService
(Java)를 상속하는 서비스 클래스를 작성하여 서비스 수준의 기능을 구현할 수 있습니다. 사용자 지정 행위자 서비스는 (C#) 또는 FabricActorService
(Java)에서 ActorService
모든 행위자 런타임 기능을 상속합니다. 사용자 고유의 서비스 메서드를 구현하는 데 사용할 수 있습니다.
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);
}
}
행위자 백업 및 복원 구현
사용자 지정 행위자 서비스는 이미 있는 원격 수신기를 활용하여 행위자 데이터를 백업하는 메서드를 노출할 수 있습니다 ActorService
. 예를 들어 백업 및 복원 행위자를 참조하세요.
원격 V2(인터페이스 호환) 스택을 사용하는 행위자
원격 V2(인터페이스 호환, V2_1라고 함) 스택에는 V2 원격 스택의 모든 기능이 있습니다. 그 인터페이스는 리모팅 V1 스택과 호환되지만, 이전 버전인 V2 및 V1과는 호환되지 않습니다. 서비스 가용성에 영향을 주지 않고 V1에서 V2_1 업그레이드하려면 다음 섹션의 단계를 수행합니다.
원격 V2_1 스택을 사용하려면 다음 변경이 필요합니다.
행위자 인터페이스에 다음 어셈블리 특성을 추가합니다.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
행위자 서비스 및 행위자 클라이언트 프로젝트를 빌드하고 업그레이드하여 V2 스택 사용을 시작합니다.
서비스 가용성에 영향을 주지 않고 원격 V2(인터페이스 호환) 스택으로 행위자 서비스 업그레이드
이 변경은 2단계 업그레이드입니다. 이 순서의 단계를 따릅니다.
행위자 인터페이스에 다음 어셈블리 특성을 추가합니다. 이 특성은 행위자 서비스 V1(기존) 및 V2_1 수신기에 대한 두 수신기를 시작합니다. 이 변경 내용으로 행위자 서비스를 업그레이드합니다.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
이전 업그레이드를 완료한 후 행위자 클라이언트를 업그레이드합니다. 이 단계에서는 액터 프록시가 리모팅 V2_1 스택을 사용하는 것을 보장합니다.
이 단계는 선택 사항입니다. 이전 특성을 변경하여 V1 수신기를 제거합니다.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
원격 V2 스택을 사용하는 행위자
버전 2.8 NuGet 패키지를 사용하면 이제 사용자가 원격 V2 스택을 사용할 수 있습니다. 이 스택은 더 나은 성능을 발휘하고 사용자 지정 serialization과 같은 기능을 제공합니다. V2 원격 통신은 기존 원격 통신 스택(현재 V1 원격 통신 스택이라고 불림)과 역호환되지 않습니다.
원격 V2 스택을 사용하려면 다음과 같은 변경이 필요합니다.
행위자 인터페이스에 다음 어셈블리 특성을 추가합니다.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
행위자 서비스 및 행위자 클라이언트 프로젝트를 빌드하고 업그레이드하여 V2 스택 사용을 시작합니다.
서비스 가용성에 영향을 주지 않고 행위자 서비스를 원격 V2 스택으로 업그레이드
이 변경은 2단계 업그레이드입니다. 이 순서의 단계를 따릅니다.
행위자 인터페이스에 다음 어셈블리 특성을 추가합니다. 이 특성은 행위자 서비스 V1(기존) 및 V2 수신기에 대한 두 개의 수신기를 시작합니다. 이 변경 내용으로 행위자 서비스를 업그레이드합니다.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
이전 업그레이드를 완료한 후 행위자 클라이언트를 업그레이드합니다. 이 단계에서는 행위자 프록시가 원격 V2 스택을 사용하는지 확인합니다.
이 단계는 선택 사항입니다. 이전 특성을 변경하여 V1 수신기를 제거합니다.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]