Membuat aplikasi Java Service Fabric Reliable Actors pertama Anda di Linux
Mulai cepat ini membantu Anda membuat aplikasi Azure Service Fabric Java pertama Anda di lingkungan pengembangan Linux hanya dalam beberapa menit. Setelah selesai, Anda akan memiliki aplikasi layanan tunggal Java sederhana yang berjalan di klaster pengembangan lokal.
Prasyarat
Sebelum Anda memulai, instal Service Fabric SDK, Service Fabric CLI, Yeoman, atur lingkungan pengembangan Java, dan siapkan klaster pengembangan di lingkungan pengembangan Linux Anda. Jika Anda menggunakan Mac OS X, Anda dapat Mengatur lingkungan pengembangan di Mac menggunakan Docker.
Instal juga Service Fabric CLI.
Menginstal dan mengatur generator untuk Java
Service Fabric menyediakan alat perancah yang membantu Anda membuat aplikasi Service Fabric dari terminal menggunakan generator templat Yeoman. Jika Yeoman belum diinstal, lihat Service Fabric memulai Linux untuk petunjuk tentang pengaturan Yeoman. Jalankan perintah berikut untuk menginstal generator templat Service Fabric Yeoman untuk Java.
npm install -g generator-azuresfjava
Konsep dasar
Untuk memulai dengan Reliable Service, Anda hanya perlu memahami beberapa konsep dasar:
Layanan aktor. Reliable Actors dikemas dalam Reliable Service yang dapat digunakan dalam infrastruktur Service Fabric. Instans aktor diaktifkan dalam instans layanan bernama.
Pendaftaran aktor. Seperti halnya Reliable Service, layanan Reliable Actor perlu didaftarkan ke runtime Service Fabric. Selain itu, tipe aktor perlu didaftarkan ke runtime Aktor.
Antarmuka aktor. Antarmuka aktor digunakan untuk mendefinisikan antarmuka publik yang diketik dengan kuat dari seorang aktor. Dalam terminologi model Reliable Actor, antarmuka aktor mendefinisikan jenis pesan yang dapat dipahami dan diproses oleh aktor. Antarmuka aktor digunakan oleh aktor lain dan aplikasi klien untuk "mengirim" (secara asinkron) pesan kepada aktor. Reliable Actor dapat mengimplementasikan beberapa antarmuka.
Kelas ActorProxy. Kelas ActorProxy digunakan oleh aplikasi klien untuk memanggil metode yang diekspos melalui antarmuka aktor. Kelas ActorProxy menyediakan dua fungsi penting:
- Resolusi nama: Ia dapat menemukan aktor dalam klaster (menemukan node klaster tempatnya dihosting).
- Penanganan kegagalan: Ini dapat mencoba kembali pemanggilan metode dan menyelesaikan ulang lokasi aktor setelah, misalnya, kegagalan yang mengharuskan aktor untuk dipindahkan ke node lain dalam klaster.
Aturan berikut yang berkaitan dengan antarmuka aktor layak disebutkan:
- Metode antarmuka aktor tidak dapat kelebihan beban.
- Metode antarmuka aktor tidak boleh memiliki parameter keluar, ref, atau opsional.
- Antarmuka generik tidak didukung.
Buat aplikasi
Aplikasi Service Fabric berisi satu atau beberapa layanan, masing-masing dengan peran khusus dalam memberikan fungsionalitas aplikasi. Generator yang Anda instal di bagian terakhir, memudahkan Anda membuat layanan pertama dan menambahkan lebih banyak nanti. Anda juga dapat membuat, membangun, dan menyebarkan aplikasi Service Fabric Java menggunakan plugin untuk Eclipse. Lihat Membuat dan menggunakan aplikasi Java pertama Anda menggunakan Eclipse. Untuk mulai cepat ini, gunakan Yeoman untuk membuat aplikasi dengan satu layanan yang menyimpan dan mendapatkan nilai
- Di terminal, ketik
yo azuresfjava
. - Beri nama aplikasi.
- Pilih jenis layanan pertama Anda dan beri nama. Untuk tutorial ini, pilih Reliable Actor Service. Untuk informasi selengkapnya tentang jenis layanan lainnya, lihat Gambaran umum model pemrograman Service Fabric.
Jika Anda menamai aplikasi "HelloWorldActorApplication" dan aktor "HelloWorldActor", perancah berikut dibuat:
HelloWorldActorApplication/
├── build.gradle
├── HelloWorldActor
│ ├── build.gradle
│ ├── settings.gradle
│ └── src
│ └── reliableactor
│ ├── HelloWorldActorHost.java
│ └── HelloWorldActorImpl.java
├── HelloWorldActorApplication
│ ├── ApplicationManifest.xml
│ └── HelloWorldActorPkg
│ ├── Code
│ │ ├── entryPoint.sh
│ │ └── _readme.txt
│ ├── Config
│ │ ├── _readme.txt
│ │ └── Settings.xml
│ ├── Data
│ │ └── _readme.txt
│ └── ServiceManifest.xml
├── HelloWorldActorInterface
│ ├── build.gradle
│ └── src
│ └── reliableactor
│ └── HelloWorldActor.java
├── HelloWorldActorTestClient
│ ├── build.gradle
│ ├── settings.gradle
│ ├── src
│ │ └── reliableactor
│ │ └── test
│ │ └── HelloWorldActorTestClient.java
│ └── testclient.sh
├── install.sh
├── settings.gradle
└── uninstall.sh
Blok penyusun dasar Reliable Actors
Konsep dasar yang dijelaskan sebelumnya diterjemahkan ke dalam blok bangunan dasar layanan Reliable Actor.
Antarmuka aktor
Antarmuka ini berisi definisi antarmuka untuk aktor. Antarmuka ini mendefinisikan kontrak aktor yang dibagikan oleh implementasi aktor dan klien yang memanggil aktor, sehingga biasanya masuk akal untuk mendefinisikannya di tempat yang terpisah dari implementasi aktor dan dapat dibagikan oleh beberapa layanan lain atau aplikasi
HelloWorldActorInterface/src/reliableactor/HelloWorldActor.java
:
public interface HelloWorldActor extends Actor {
@Readonly
CompletableFuture<Integer> getCountAsync();
CompletableFuture<?> setCountAsync(int count);
}
Layanan aktor
Layanan ini berisi implementasi aktor dan kode pendaftaran aktor Anda. Kelas aktor mengimplementasikan antarmuka aktor. Di sinilah aktor Anda melakukan pekerjaannya.
HelloWorldActor/src/reliableactor/HelloWorldActorImpl
:
@ActorServiceAttribute(name = "HelloWorldActorService")
@StatePersistenceAttribute(statePersistence = StatePersistence.Persisted)
public class HelloWorldActorImpl extends FabricActor implements HelloWorldActor {
private Logger logger = Logger.getLogger(this.getClass().getName());
public HelloWorldActorImpl(FabricActorService actorService, ActorId actorId){
super(actorService, actorId);
}
@Override
protected CompletableFuture<?> onActivateAsync() {
logger.log(Level.INFO, "onActivateAsync");
return this.stateManager().tryAddStateAsync("count", 0);
}
@Override
public CompletableFuture<Integer> getCountAsync() {
logger.log(Level.INFO, "Getting current count value");
return this.stateManager().getStateAsync("count");
}
@Override
public CompletableFuture<?> setCountAsync(int count) {
logger.log(Level.INFO, "Setting current count value {0}", count);
return this.stateManager().addOrUpdateStateAsync("count", count, (key, value) -> count > value ? count : value);
}
}
Pendaftaran aktor
Layanan aktor harus terdaftar dengan jenis layanan dalam runtime Service Fabric. Agar Layanan Aktor dapat menjalankan instans aktor Anda, jenis aktor Anda juga harus terdaftar di Layanan Aktor. Metode pendaftaran ActorRuntime
melakukan pekerjaan ini untuk aktor.
HelloWorldActor/src/reliableactor/HelloWorldActorHost
:
public class HelloWorldActorHost {
private static final Logger logger = Logger.getLogger(HelloWorldActorHost.class.getName());
public static void main(String[] args) throws Exception {
try {
ActorRuntime.registerActorAsync(HelloWorldActorImpl.class, (context, actorType) -> new FabricActorService(context, actorType, (a,b)-> new HelloWorldActorImpl(a,b)), Duration.ofSeconds(10));
Thread.sleep(Long.MAX_VALUE);
} catch (Exception e) {
logger.log(Level.SEVERE, "Exception occurred", e);
throw e;
}
}
}
Membangun aplikasi
Templat Service Fabric Yeoman menyertakan skrip build untuk Gradle, yang dapat Anda gunakan untuk membangun aplikasi dari terminal. Ketergantungan Service Fabric Java diambil dari Maven. Untuk membuat dan mengerjakan aplikasi Service Fabric Java, Anda perlu memastikan bahwa Anda telah menginstal JDK dan Gradle. Jika tidak diinstal, lihat Service Fabric yang memulai Linux untuk petunjuk tentang menginstal JDK dan Gradle.
Untuk membangun dan mengemas aplikasi, jalankan tindakan berikut:
cd HelloWorldActorApplication
gradle
Menyebarkan aplikasi
Setelah aplikasi dibangun, Anda dapat menyebarkannya ke klaster lokal.
Sambungkan ke klaster Service Fabric lokal (klaster harus disiapkan dan dijalankan).
sfctl cluster select --endpoint http://localhost:19080
Jalankan skrip instal yang disediakan di templat untuk menyalin paket aplikasi ke penyimpanan klaster gambar, daftarkan jenis aplikasi, dan buat instans aplikasi.
./install.sh
Menyebarkan aplikasi yang dibangun sama dengan aplikasi Service Fabric lainnya. Lihat dokumentasi tentang mengelola aplikasi Service Fabric dengan Service Fabric CLI untuk petunjuk terperinci.
Parameter untuk perintah ini dapat ditemukan dalam manifes yang dihasilkan di dalam paket aplikasi.
Setelah aplikasi disebarkan, buka browser dan navigasi ke Service Fabric Explorer di http://localhost:19080/Explorer
.
Kemudian, perluas node Aplikasi dan perhatikan bahwa sekarang ada entri untuk jenis aplikasi Anda dan entri lain untuk instans pertama dari jenis itu.
Penting
Untuk menyebarkan aplikasi ke klaster Linux yang aman di Azure, Anda perlu mengonfigurasi sertifikat untuk memvalidasi aplikasi Anda dengan runtime Service Fabric. Melakukannya memungkinkan layanan Reliable Actors Anda untuk berkomunikasi dengan API runtime Service Fabric yang mendasarinya. Untuk mempelajari lebih lanjut, lihat Mengonfigurasi aplikasi Reliable Services untuk dijalankan di klaster Linux.
Mulai klien uji dan lakukan failover
Aktor tidak melakukan apa pun sendiri, mereka memerlukan layanan atau klien lain untuk mengirimi mereka pesan. Template aktor mencakup skrip uji sederhana yang dapat Anda gunakan untuk berinteraksi dengan layanan aktor.
Catatan
Klien pengujian menggunakan kelas ActorProxy untuk berkomunikasi dengan aktor, yang harus berjalan dalam klaster yang sama dengan layanan aktor atau berbagi ruang alamat IP yang sama. Anda dapat menjalankan klien uji di komputer yang sama sebagai klaster pengembangan lokal. Namun, untuk berkomunikasi dengan aktor di klaster jarak jauh, Anda harus menerapkan gateway pada klaster yang menangani komunikasi eksternal dengan para aktor.
Jalankan skrip menggunakan utilitas jam tangan untuk melihat output layanan aktor. Skrip pengujian memanggil metode
setCountAsync()
pada aktor untuk menambah penghitung, memanggil metodegetCountAsync()
pada aktor untuk mendapatkan nilai penghitung baru, dan menampilkan nilai itu ke konsol.Dalam kasus MAC OS X, Anda perlu menyalin folder HelloWorldTestClient ke beberapa lokasi di dalam kontainer dengan menjalankan perintah tambahan berikut.
docker cp HelloWorldTestClient [first-four-digits-of-container-ID]:/home docker exec -it [first-four-digits-of-container-ID] /bin/bash cd /home
cd HelloWorldActorTestClient watch -n 1 ./testclient.sh
Di Service Fabric Explorer, temukan node yang menghosting replika utama untuk layanan aktor. Cuplikan layar di bawah ini adalah node 3. Replika layanan utama menangani operasi baca dan tulis. Perubahan status layanan kemudian direplikasi ke replika sekunder, berjalan pada node 0 dan 1 pada cuplikan layar di bawah ini.
Di Node, klik node yang Anda temukan di langkah sebelumnya, lalu pilih Nonaktifkan (restart) dari menu Tindakan. Tindakan ini merestart node yang menjalankan replika servis utama dan memaksa failover ke salah satu replika sekunder yang berjalan pada node lain. Replika sekunder dipromosikan menjadi replika utama, replika sekunder lain dibuat pada node yang berbeda, dan replika utama mulai mengambil operasi baca/tulis. Saat node direstart, perhatikan output dari klien pengujian dan perhatikan bahwa penghitung terus bertambah meskipun terjadi failover.
Hapus aplikasi
Gunakan skrip uninstal yang disediakan dalam templat untuk menghapus instans aplikasi, membatalkan pendaftaran paket aplikasi, dan menghapus paket aplikasi dari penyimpanan gambar klaster.
./uninstall.sh
Di Penjelajah Service Fabric, Anda melihat bahwa jenis aplikasi dan aplikasi tidak lagi muncul di node Aplikasi.
Pustaka Service Fabric Java pada Maven
Pustaka Service Fabric Java telah dihosting di Maven. Anda dapat menambahkan dependensi di pom.xml
atau build.gradle
proyek Anda untuk menggunakan pustaka Service Fabric Java dari mavenCentral.
Aktor
Dukungan Service Fabric Reliable Actor untuk aplikasi Anda.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf-actors</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf-actors:1.0.0'
}
Layanan
Dukungan Service Fabric Reliable Services untuk aplikasi Anda.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf-services</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf-services:1.0.0'
}
Lainnya
Transportasi
Dukungan transport layer untuk aplikasi Service Fabric Java Anda tidak perlu menambahkan dependensi ini secara eksplisit ke aplikasi Reliable Actor atau Service Anda, kecuali jika Anda memprogram di lapisan transportasi.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf-transport</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf-transport:1.0.0'
}
Dukungan fabric
Dukungan tingkat sistem untuk Service Fabric, yang berbicara dengan runtime Service Fabric asli. Anda tidak perlu menambahkan dependensi ini secara eksplisit ke aplikasi Reliable Actor atau Service Anda. Depedensi ini diambil secara otomatis dari Maven, saat Anda menyertakan dependensi lain di atas.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf:1.0.0'
}