Bagikan melalui


Menerapkan fitur tingkat layanan di layanan aktor Anda

Seperti yang dijelaskan dalam pelapisan layanan, layanan aktor itu sendiri adalah layanan yang dapat diandalkan. Anda dapat menulis layanan Anda sendiri yang berasal dari ActorService. Anda juga dapat menerapkan fitur tingkat layanan dengan cara yang sama seperti ketika Anda mewarisi layanan berstatus, seperti:

  • Pencadangan dan pemulihan layanan.
  • Fungsionalitas bersama untuk semua aktor, misalnya, pemutus arus.
  • Prosedur jarak jauh menggunakan layanan aktor itu sendiri dan di setiap aktor.

Menggunakan layanan aktor

Instans aktor memiliki akses ke layanan aktor tempat instans dijalankan. Melalui layanan aktor, instans aktor dapat memperoleh konteks layanan secara terprogram. Konteks layanan memiliki ID partisi, nama layanan, nama aplikasi, dan informasi khusus platform Azure Service Fabric lainnya.

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();
}

Seperti semua Reliable Services, layanan aktor harus terdaftar dengan jenis layanan dalam runtime Service Fabric. Agar layanan aktor dapat menjalankan instans aktor Anda, jenis aktor juga harus terdaftar di layanan aktor. Metode pendaftaran ActorRuntime melakukan pekerjaan ini untuk aktor. Dalam kasus yang paling sederhana, Anda dapat mendaftarkan jenis aktor Anda, dan layanan aktor kemudian menggunakan pengaturan default.

static class Program
{
    private static void Main()
    {
        ActorRuntime.RegisterActorAsync<MyActor>().GetAwaiter().GetResult();

        Thread.Sleep(Timeout.Infinite);
    }
}

Atau, Anda dapat menggunakan lambda yang disediakan oleh metode pendaftaran untuk menyusun layanan aktor Anda sendiri. Anda kemudian dapat mengonfigurasi layanan aktor dan secara eksplisit membuat instans aktor Anda. Anda dapat memasukkan dependensi ke aktor melalui konstruktornya.

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);
    }
}

Metode layanan aktor

Layanan aktor menerapkan IActorService (C#) atau ActorService (Java), yang pada gilirannya mengimplementasikan IService (C#) atau Service (Java). Antarmuka ini digunakan oleh remoting Reliable Services, yang memungkinkan panggilan prosedur jarak jauh dengan metode layanan. Ini berisi metode tingkat layanan yang dapat dipanggil dari jarak jauh melalui remoting layanan. Anda dapat menggunakannya untuk menghitung dan menghapus aktor.

Layanan aktor kustom

Dengan menggunakan lambda pendaftaran aktor, Anda dapat mendaftarkan layanan aktor kustom Anda sendiri yang berasal dari ActorService (C#) dan FabricActorService (Java). Kemudian, Anda dapat menerapkan fungsionalitas tingkat layanan Anda sendiri dengan menulis kelas layanan yang mewarisi ActorService (C#) atau FabricActorService (Java). Layanan aktor kustom mewarisi semua fungsionalitas runtime aktor dari ActorService (C#) atau FabricActorService (Java). Layanan ini dapat digunakan untuk menerapkan metode layanan Anda sendiri.

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);
    }
}

Menerapkan pencadangan dan pemulihan aktor

Layanan aktor kustom dapat mengekspos metode untuk mencadangkan data aktor dengan memanfaatkan listener remoting yang sudah ada di ActorService. Misalnya, lihat Mencadangkan dan memulihkan aktor.

Aktor yang menggunakan tumpukan remoting V2 (antarmuka yang kompatibel)

Tumpukan remoting V2 (kompatibel antarmuka, yang dikenal sebagai V2_1) memiliki semua fitur tumpukan remoting V2. Antarmukanya kompatibel dengan tumpukan remoting V1, tetapi tidak kompatibel mundur dengan V2 dan V1. Untuk meningkatkan versi dari V1 ke V2_1 tanpa memengaruhi ketersediaan layanan, ikuti langkah-langkah pada bagian berikutnya.

Perubahan berikut ini diperlukan untuk menggunakan tumpukan remoting V2_1:

  1. Tambahkan atribut rakitan berikut pada antarmuka aktor.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
    
  2. Buat dan tingkatkan layanan aktor dan proyek klien aktor untuk mulai menggunakan tumpukan V2.

Peningkatan versi layanan aktor untuk tumpukan remoting V2 (antarmuka yang kompatibel) tanpa mempengaruhi ketersediaan layanan

Perubahan ini adalah peningkatan dua langkah. Ikuti langkah-langkahnya dalam urutan ini.

  1. Tambahkan atribut rakitan berikut pada antarmuka aktor. Atribut ini memulai dua listener untuk layanan aktor, V1 (lama) dan listener V2_1. Tingkatkan versi layanan aktor dengan perubahan ini.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
    
  2. Tingkatkan versi klien aktor setelah Anda menyelesaikan peningkatan versi sebelumnya. Langkah ini memastikan bahwa proksi aktor menggunakan tumpukan remoting V2_1.

  3. Langkah ini bersifat opsional. Ubah atribut sebelumnya untuk menghapus listener V1.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1,RemotingClientVersion = RemotingClientVersion.V2_1)]
    

Aktor yang menggunakan tumpukan remoting V2

Dengan paket NuGet versi 2.8, pengguna kini dapat menggunakan tumpukan remoting V2, yang memiliki performa lebih baik dan menyediakan fitur seperti serialisasi kustom. Remoting V2 tidak kompatibel mundur dengan tumpukan remoting yang ada (sekarang disebut tumpukan remoting V1).

Perubahan berikut diperlukan untuk menggunakan tumpukan remoting V2.

  1. Tambahkan atribut rakitan berikut pada antarmuka aktor.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
    
  2. Buat dan tingkatkan versi layanan aktor dan proyek klien aktor untuk mulai menggunakan tumpukan V2.

Tingkatkan versi layanan aktor ke tumpukan remoting V2 tanpa mempengaruhi ketersediaan layanan

Perubahan ini adalah peningkatan dua langkah. Ikuti langkah-langkahnya dalam urutan ini.

  1. Tambahkan atribut rakitan berikut pada antarmuka aktor. Atribut ini memulai dua listener untuk layanan aktor, V1 (lama) dan listener V2. Tingkatkan versi layanan aktor dengan perubahan ini.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V1|RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
    
  2. Tingkatkan versi klien aktor setelah Anda menyelesaikan peningkatan versi sebelumnya. Langkah ini memastikan bahwa proksi aktor menggunakan tumpukan remoting V2.

  3. Langkah ini bersifat opsional. Ubah atribut sebelumnya untuk menghapus listener V1.

    [assembly:FabricTransportActorRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2,RemotingClientVersion = RemotingClientVersion.V2)]
    

Langkah berikutnya