Spring Boot ile Reaktif Programlama, geliştiricilere bloklamayan, olay güdümlü ve yüksek ölçeklenebilir uygulamalar oluşturma imkanı sunar. Spring WebFlux ve Project Reactor kullanarak eşzamanlı istekleri düşük kaynak kullanımıyla yönetebilir, mikro hizmetler ve gerçek zamanlı uygulamalar geliştirebilirsiniz.
🌟 Neden Reaktif Programlama Kullanmalıyız?
- Eşzamansız & Bloklamayan İşleme: Birden fazla isteği iş parçacıklarını bloklamadan verimli bir şekilde yönetin.
- Daha İyi Ölçeklenebilirlik: Daha az kaynak kullanarak daha fazla eşzamanlı kullanıcıyı destekleyin.
- Olay Güdümlü Model: Mikro hizmetler, gerçek zamanlı uygulamalar ve veri akışı işleme için idealdir.
- Dahili Geri Basınç (Backpressure): Sistemin aşırı yüklenmesini önler.
🌟 Gereksinimler
Şunlara sahip olduğunuzdan emin olun:
- ☕ Java Development Kit (JDK) 17+
- 📦 Maven veya Gradle kurulu
- 🔤 Bir Java IDE (IntelliJ IDEA, Eclipse vb.)
🛠️ Adım 1: Bağımlılıkları Ekleyin
Spring WebFlux bağımlılığını pom.xml
veya build.gradle
dosyanıza ekleyin.
Maven:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>
Gradle:
implementation 'org.springframework.boot:spring-boot-starter-webflux'
📋 Adım 2: Reaktif REST Controller Oluşturun
Mono ve Flux kullanarak bloklamayan bir REST endpoint'i tanımlayın.
package com.example.reaktif; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.time.Duration; import java.util.List; @RestController @RequestMapping("/reaktif") public class ReaktifController { @GetMapping("/mono") public Mono<String> getMono() { return Mono.just("Reaktif Mono'dan Merhaba!"); } @GetMapping("/flux") public Flux<String> getFlux() { return Flux.fromIterable(List.of("Merhaba", "Reaktif", "Dünya")) .delayElements(Duration.ofSeconds(1)); } }
package com.example.reaktif import org.springframework.web.bind.annotation.* import reactor.core.publisher.Flux import reactor.core.publisher.Mono import java.time.Duration @RestController @RequestMapping("/reaktif") class ReaktifController { @GetMapping("/mono") fun getMono(): Mono<String> { return Mono.just("Reaktif Mono'dan Merhaba!") } @GetMapping("/flux") fun getFlux(): Flux<String> { return Flux.just("Merhaba", "Reaktif", "Dünya") .delayElements(Duration.ofSeconds(1)) } }
▶️ Uygulamayı Çalıştırma
Spring Boot uygulamasını çalıştırın:
./mvnw spring-boot:run
Veya Gradle kullanarak:
gradle bootRun
🧪 API'yi Test Etme
Mono Endpoint Testi:
curl -X GET http://localhost:8080/reaktif/mono
Beklenen çıktı:
Reaktif Mono'dan Merhaba!
Flux Endpoint Testi:
curl -X GET http://localhost:8080/reaktif/flux
Beklenen çıktı (her kelime için 1 saniyelik gecikme ile):
Merhaba Reaktif Dünya
Spring Boot ile WebFlux ve Project Reactor, geliştiricilere yüksek ölçeklenebilir, bloklamayan uygulamalar oluşturma imkanı sunar. Mikro hizmetler, veri akışı işleme ve gerçek zamanlı olay işleme için reaktif programlama, yüksek performanslı uygulamaların geleceğidir. 🚀