What and How ZooKeeper Threading Model
What and How ZooKeeper Threading Model
Ketika Zookeeper dijalankan maka fungsi utama akan dijalankan pada main thread (Thread Utama), ketika objek zookeeper dibuat dua thread tambahan akan dibuat yaitu :
- Event Thread
- IO Thread
Fungsi IO Thread pada Zookeeper
- IOThread berguna untuk melakukan komunikasi jaringan antara aplikasi dengan zookeeper server.
- IOThread Berguna untuk menghandle Zookeeper Request dan Response
- IOThread Melakukan Ping pada Zookeeper
- IOThread Menghandel Session (Session Management)
- IOThread Menghandel Sesi Time Out (Session Time Out)
Fungsi Even Thread pada Zookeeper
- Mengatur event pada zookeeper, event yang diatur adalah untuk melakukan koneksi yang diatur oleh class KeeperState.SyncConected dan memutuskan koneksi pada class KeeperState.Disconected
- Custom Znode Watchers dan Trigger
- Mengeksekusi Event
Membuat Aplikasi Sistem Terdistribusi
Selanjutnya kita akan membuat aplikasi menggunakan bahasa java untuk melakukan koneksi dan memutus koneksi Aplikasi Sistem Terdistribusi menggunakan Editor IntelliJ IDEA jika anda belum memiliki aplikasi tesebut silahkan download terlebih dahulu pada link berikut:- Buatlah project baru pada IntelliJ IDEA
- Lakukan konfigurasi project baru seperti pada gambar dibawah ini.
- Tekan tombol create untuk membuat project baru.
- buka file pom.xml kemudian sesuaikan isi dari file tersebut seperti berikut
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>distributed.systems</groupId>
<artifactId>leader.election</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.12</version>
</dependency>
</dependencies>
</project>
- Setelah menyesuaikan pom.xml selanjutnya kita perlu mengatur settingan plugin agar library yang dibutuhkan dapat terdownload secara otomatis, settingan tersebut berada di menu file-setting-Build,Execution,Deployment-Build Tools-Maven Kemudian ceklis pilihan use plugin registry. lihat pada gambar dibawah kemudian tekan tombol OK.
- Klik menu Build-Build Project agar library dapat terdownload kedalam komputer, pastikan internet terkoneksi dengan baik.
- Buat class baru pada folder main/java kemudian berikan nama LeaderElection.java
- Masukan Short Code sebagai berikut
import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import java.io.IOException; /** * Zookeeper Client Threading Model & Zookeeper Java API */ public class LeaderElection implements Watcher { private static final String ZOOKEEPER_ADDRESS = "localhost:2181"; private static final int SESSION_TIMEOUT = 3000; private ZooKeeper zooKeeper; public static void main(String[] arg) throws IOException, InterruptedException, KeeperException { LeaderElection leaderElection = new LeaderElection(); leaderElection.connectToZookeeper(); leaderElection.run(); leaderElection.close(); System.out.println("Disconnected from Zookeeper, exiting application"); } public void connectToZookeeper() throws IOException { this.zooKeeper = new ZooKeeper(ZOOKEEPER_ADDRESS, SESSION_TIMEOUT, this); } private void run() throws InterruptedException { synchronized (zooKeeper) { zooKeeper.wait(); } } private void close() throws InterruptedException { this.zooKeeper.close(); } @Override public void process(WatchedEvent event) { switch (event.getType()) { case None: if (event.getState() == Event.KeeperState.SyncConnected) { System.out.println("Successfully connected to Zookeeper"); } else { synchronized (zooKeeper) { System.out.println("Disconnected from Zookeeper event"); zooKeeper.notifyAll(); } } } } }
- Sebelum kita menjalankan aplikasi kita perlu menambahkan sebuah file baru pada folder main/resources Klik kanan pada folder resources kemudian klik new-file Berikan nama log4j.properties.
- Masukan coding berikut pada file tersebut
log4j.rootLogger=WARN, zookeeper
log4j.appender.zookeeper=org.apache.log4j.ConsoleAppender
log4j.appender.zookeeper.Target=System.out
log4j.appender.zookeeper.layout=org.apache.log4j.PatternLayout
log4j.appender.zookeeper.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c{1}:%L - %m%n
- Jika sudah saatnya kita menjalankan aplikasi namun kita perlu menjalankan Apache ZooKeeper Server terlebih dahulu lihat perintah menjalankan zookeeper pada link berikut Cara menjalankan ZooKeeper server
Gabung dalam percakapan