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.
Yazan
Şuayb Şimşek
Spring Boot, güvenlik, mikroservis ve cloud-native mimari konularında pratik teknik notlar paylaşan backend odaklı fullstack geliştirici.
Mono ve Flux kullanarak bloklamayan bir REST endpoint'i tanımlayın.
▶️ Uygulamayı Çalıştırma
Spring Boot uygulamasını çalıştırın:
BASH
./mvnw spring-boot:run
Veya Gradle kullanarak:
BASH
gradle bootRun
🧪 API'yi Test Etme
Bu bölümde API'yi Test Etme konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.
Mono Endpoint Testi:
Bu kontrol adımı, endpoint davranışının beklenen çıktı ile uyumunu doğrulamak için kullanılır.
BASH
curl -X GET http://localhost:8080/reaktif/mono
Beklenen çıktı:
PLAINTEXTsnippet.txt
Reaktif Mono'dan Merhaba!
Flux Endpoint Testi:
Bu kontrol adımı, endpoint davranışının beklenen çıktı ile uyumunu doğrulamak için kullanılır.
BASH
curl -X GET http://localhost:8080/reaktif/flux
Beklenen çıktı (her kelime için 1 saniyelik gecikme ile):
PLAINTEXTsnippet.txt
Merhaba
Reaktif
Dünya
🏁 Sonuç
Artık Spring Boot Reaktif Programlama için üretim odaklı bir Spring Boot temeliniz var. Sonraki adımda ayarları kendi domainine uyarlayıp test ve gözlemlenebilirlik katmanını ekleyerek gerçek trafik altında doğrulayın.
JAVAReaktifController.java
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));
}
}