Aracılığıyla paylaş


Aktör hizmetinizde hizmet düzeyi özellikleri uygulama

Hizmet katmanında açıklandığı gibi aktör hizmetinin kendisi güvenilir bir hizmettir. 'den ActorServicetü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 ActorServiceuzaktan 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:

  1. Aktör arabirimlerine aşağıdaki derleme özniteliğini ekleyin.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
    
  2. 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.

  1. 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)]
    
  2. Ö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.

  3. 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.

  1. Aktör arabirimlerine aşağıdaki derleme özniteliğini ekleyin.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
    
  2. 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.

  1. 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)]
    
  2. Ö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.

  3. 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)]
    

Sonraki adımlar