Aktör hizmetinizde hizmet düzeyi özellikleri uygulama
Hizmet katmanında açıklandığı gibi aktör hizmetinin kendisi güvenilir bir hizmettir. 'den ActorService
türetilen kendi hizmetinizi yazabilirsiniz. Ayrıca, durum bilgisi olan bir hizmeti devraldığınızda olduğu gibi hizmet düzeyi özellikleri de uygulayabilirsiniz, örneğin:
- Hizmet yedekleme ve geri yükleme.
- Devre kesici gibi tüm aktörler için paylaşılan işlevsellik.
- Uzaktan yordam, aktör hizmetinin kendisini ve her bir aktörü çağırır.
Aktör hizmetini kullanma
Aktör örnekleri, çalıştırıldığı aktör hizmetine erişebilir. Aktör hizmeti aracılığıyla aktör örnekleri program aracılığıyla hizmet bağlamını alabilir. Hizmet bağlamı bölüm kimliği, hizmet adı, uygulama adı ve diğer Azure Service Fabric platformuna özgü bilgilere sahiptir.
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();
}
Tüm Reliable Services gibi aktör hizmetinin de Service Fabric çalışma zamanında bir hizmet türüyle kaydedilmesi gerekir. Aktör hizmetinin aktör örneklerinizi çalıştırması için aktör türünüzün de aktör hizmetine kaydedilmesi gerekir. ActorRuntime
kayıt yöntemi bu işi aktörlerin yerine gerçekleştirir. En basit durumda aktör türünüzü kaydedebilirsiniz ve ardından aktör hizmeti varsayılan ayarları kullanır.
static class Program
{
private static void Main()
{
ActorRuntime.RegisterActorAsync<MyActor>().GetAwaiter().GetResult();
Thread.Sleep(Timeout.Infinite);
}
}
Alternatif olarak, aktör hizmetini kendiniz oluşturmak için kayıt yöntemi tarafından sağlanan bir lambda kullanabilirsiniz. Daha sonra aktör hizmetini yapılandırabilir ve aktör örneklerinizi açıkça oluşturabilirsiniz. Oluşturucu aracılığıyla aktörünüzün bağımlılıklarını ekleyebilirsiniz.
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);
}
}
Aktör hizmeti yöntemleri
Aktör hizmeti IActorService
(C#) veya ActorService
(Java) uygular ve bu da (C#) veya Service
(Java) uygular IService
. Bu arabirim, hizmet yöntemlerinde uzaktan yordam çağrılarına izin veren Reliable Services uzaktan iletişim tarafından kullanılır. Uzaktan hizmet uzaktan iletişim aracılığıyla uzaktan çağrılabilen hizmet düzeyinde yöntemler içerir. Aktörleri listelemek ve silmek için bunu kullanabilirsiniz.
Özel aktör hizmeti
Aktör kaydı lambdasını kullanarak (C#) ve FabricActorService
(Java) kaynaklarından ActorService
türetilen kendi özel aktör hizmetinizi kaydedebilirsiniz. Daha sonra (C#) veya FabricActorService
(Java) devralan ActorService
bir hizmet sınıfı yazarak kendi hizmet düzeyi işlevselliğinizi uygulayabilirsiniz. Özel aktör hizmeti tüm aktör çalışma zamanı işlevselliğini (C#) veya FabricActorService
(Java) devralır ActorService
. Kendi hizmet yöntemlerinizi uygulamak için kullanılabilir.
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);
}
}
Aktör yedekleme ve geri yükleme uygulama
Özel aktör hizmeti, içinde zaten var olan ActorService
uzaktan iletişim dinleyicisinin avantajlarından yararlanarak aktör verilerini yedeklemek için bir yöntemi kullanıma sunabilir. Örnek için bkz . Aktörleri yedekleme ve geri yükleme.
Uzaktan iletişim V2 (arabirim uyumlu) yığını kullanan aktör
Uzaktan iletişim V2 (arabirim uyumlu, V2_1 olarak bilinir) yığını, V2 uzaktan iletişim yığınının tüm özelliklerine sahiptir. Arabirimi uzaktan iletişim V1 yığınıyla uyumludur, ancak V2 ve V1 ile geriye dönük olarak uyumlu değildir. Hizmet kullanılabilirliği üzerinde hiçbir etkisi olmadan V1'den V2_1 yükseltmek için sonraki bölümdeki adımları izleyin.
uzaktan iletişim V2_1 yığınını kullanmak için aşağıdaki değişiklikler gereklidir:
Aktör arabirimlerine aşağıdaki derleme özniteliğini ekleyin.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
V2 yığınını kullanmaya başlamak için aktör hizmeti ve aktör istemci projeleri oluşturun ve yükseltin.
Hizmet kullanılabilirliğini etkilemeden uzaktan iletişim V2 (arabirim uyumlu) yığınına aktör hizmeti yükseltmesi
Bu değişiklik iki aşamalı bir yükseltmedir. Bu dizideki adımları izleyin.
Aktör arabirimlerine aşağıdaki derleme özniteliğini ekleyin. Bu öznitelik, aktör hizmeti için V1 (var olan) ve V2_1 dinleyicisi için iki dinleyici başlatır. Bu değişiklikle aktör hizmetini yükseltin.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
Önceki yükseltmeyi tamamladıktan sonra aktör istemcilerini yükseltin. Bu adım, aktör proxy'sinin uzaktan iletişim V2_1 yığınını kullandığından emin olur.
Bu adım isteğe bağlıdır. V1 dinleyicisini kaldırmak için önceki özniteliği değiştirin.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
uzaktan iletişim V2 yığınını kullanan aktör
Sürüm 2.8 NuGet paketiyle kullanıcılar artık daha iyi performans gösteren ve özel serileştirme gibi özellikler sağlayan uzaktan iletişim V2 yığınını kullanabilir. Uzaktan iletişim V2, mevcut uzaktan iletişim yığınıyla (şimdi V1 uzaktan iletişim yığını olarak adlandırılır) geriye dönük olarak uyumlu değildir.
Uzaktan iletişim V2 yığınını kullanmak için aşağıdaki değişiklikler gereklidir.
Aktör arabirimlerine aşağıdaki derleme özniteliğini ekleyin.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
V2 yığınını kullanmaya başlamak için aktör hizmetini ve aktör istemci projelerini derleyin ve yükseltin.
Hizmet kullanılabilirliğini etkilemeden aktör hizmetini uzaktan iletişim V2 yığınına yükseltme
Bu değişiklik iki aşamalı bir yükseltmedir. Bu dizideki adımları izleyin.
Aktör arabirimlerine aşağıdaki derleme özniteliğini ekleyin. Bu öznitelik, aktör hizmeti için V1 (var olan) ve V2 dinleyicisi için iki dinleyici başlatır. Bu değişiklikle aktör hizmetini yükseltin.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
Önceki yükseltmeyi tamamladıktan sonra aktör istemcilerini yükseltin. Bu adım, aktör proxy'sinin uzaktan iletişim V2 yığınını kullandığından emin olur.
Bu adım isteğe bağlıdır. V1 dinleyicisini kaldırmak için önceki özniteliği değiştirin.
[assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]