Arşivler

Quarkus Projelerinde Fault Tolerance Kullanmak

Quarkus Dersleri Uygulama Örnekleri
Quarkus Dersleri Uygulama Örnekleri

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>Code language: HTML, XML (xml)

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
   // ...
}Code language: JavaScript (javascript)

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);
    }
}Code language: JavaScript (javascript)

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