Mikroservis MimarisiQuarkus

Quarkus Projelerinde Fault Tolerance Kullanmak

Quarkus Dersleri‘ne devam ediyorum.

Quarkus projelerimizde Microprofile’in Fault Tolerance’sini nasıl kullanırız açıklamaya çalışacağım.

Fault Tolerance’yi buradaki yazımda detaylıca anlattım. Buradan ulaşabilirsiniz.

Quarkus uygulamamız maven bağımlığımı aşağıdaki gibi olacak.

   <dependencies>
     <dependency>
         <groupId>io.quarkus</groupId>
         <artifactId>quarkus-arc</artifactId>
     </dependency>
     <dependency>
         <groupId>io.quarkus</groupId>
         <artifactId>quarkus-resteasy</artifactId>
     </dependency>
     <dependency>
         <groupId>io.quarkus</groupId>
         <artifactId>quarkus-junit5</artifactId>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>io.rest-assured</groupId>
         <artifactId>rest-assured</artifactId>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>io.quarkus</groupId>
         <artifactId>quarkus-smallrye-fault-tolerance</artifactId>
     </dependency>
     <dependency>
         <groupId>io.quarkus</groupId>
         <artifactId>quarkus-resteasy-jsonb</artifactId>
     </dependency>
 </dependencies>

Fault Tolerance kullanmamız gereken bağımlıık quarkus-smallrye-fault-tolerance ‘dir. Bağımlılığımızı yükledikten sonra herhangi bir ayar yapmamıza gerek kalmamaktadır.

Bir Student entity oluşturalım ve bir kontrollerini oluşturacağız.

public class Student {
    private Long id;
    private String name;
    private String surName;

    public Student(Long id,String name, String surName) {
        this.id=id;
        this.name = name;
        this.surName = surName;
    }

   // get - set
   // ...
}

Student kontrollerimizi oluşturalım;

@Path("/student")
public class StudentController {
    
    public List<Student> dataStudent(@QueryParam("id") Long id) {
        return Arrays.asList(
                new Student(1L,"Burak", "Kutbay"),
                new Student(2L,"Ali", "Veli"));
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @CircuitBreaker(failureRatio = 0.5, requestVolumeThreshold = 5, failOn = RuntimeException.class, delay = 50000L)
    public List<Student> getStudent(@QueryParam("id") Long id) {
        if (dataStudent(id).size()<=0) {
            throw new RuntimeException("Listeye Ulaşılamadı.");
        }   else return dataStudent(id);
    }
}

getStudent metotu üzerinde yaptığımız CircuitBreaker tanımlamaması sayesinde oluşacak hatalar sonucunda nasıl bir davranış sergilemesi gerektiğini belirtmiş olmaktadır.

Metot içerisindeki oluşan hatalar sonucunda yeniden deneme isteği ve bekleme süresi tanılmaları yapılabilmektedir.

Sonraki Quarkus Dersleri’nde görüşmek üzere.


Önceki Ders: Başlatma ve Kapanma Döngüsünü Yakalamak
Quarkus Dersleri
Sonraki Ders: Custom Property Kullanmak

İlgini Çekebilir

YORUM YAP

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir