Quarkus Geliştirme Desenleri
Apache Camel ile bulut-native, event-driven servisler için Quarkus 3.x mimari ve API desenleri.
When to Use
- JAX-RS veya RESTEasy Reactive ile REST API'leri oluşturma
- Resource → service → repository katmanlarını yapılandırma
- Apache Camel ve RabbitMQ ile event-driven desenler uygulama
- Hibernate Panache, caching veya reaktif akışları yapılandırma
- Validation, exception mapping veya sayfalama ekleme
- Dev/staging/production ortamları için profiller kurma (YAML yapılandırma)
- LogContext ve Logback/Logstash encoder ile özel loglama
- Async işlemler için CompletableFuture ile çalışma
- Koşullu akış işleme uygulama
- GraalVM native derleme ile çalışma
How It Works
Quarkus servislerinde Resource -> service -> repository akışını CDI scope'ları,
@Transactional sınırları, Panache/Hibernate veri erişimi ve Camel/RabbitMQ
entegrasyonlarıyla birlikte uygulayın. Aşağıdaki örnekler event üretimi,
dosya işleme, özel logging context ve async yayınlama için kopyalanabilir
başlangıç noktaları sağlar.
Examples
Birden Fazla Bağımlılıklı Service Katmanı (Lombok)
Temel Desenler:
- Constructor injection için Lombok üzerinden
@RequiredArgsConstructor - Logback loglama için
@Slf4j - try-with-resources ile kapsamlı LogContext
- Runtime parametrelerine dayalı koşullu akış mantığı
- Async işlemler için
.join()ile CompletableFuture - Başarı/hata senaryoları için event takibi
- Async Camel mesaj yayınlama
Özel Loglama Bağlamı Deseni (Logback)
Logback Yapılandırması (logback.xml):
Event Service Deseni
Camel Mesaj Yayınlama (RabbitMQ)
Camel Route Yapılandırması:
Camel Direct Route'ları (Bellek İçi)
Camel Dosya İşleme
Camel Bean Çağrısı
REST API Yapısı
Repository Deseni (Panache Repository)
Transaction'lı Service Katmanı
DTO'lar ve Validation
Exception Eşleme
CompletableFuture Async İşlemleri
Caching
YAML Yapılandırması
Sağlık Kontrolleri
Bağımlılıklar (Maven)
En İyi Uygulamalar
Mimari
- Constructor injection için Lombok üzerinden
@RequiredArgsConstructorkullanın - Service katmanını ince tutun; karmaşık mantığı uzmanlaşmış sınıflara devredin
- Mesaj yönlendirme ve entegrasyon desenleri için Camel route'larını kullanın
- Veri erişimi için Panache Repository desenini tercih edin
Event-Driven
- EventService ile işlemleri her zaman takip edin (başarı/hata eventleri)
- Bellek içi yönlendirme için Camel
direct:endpoint'leri kullanın - RabbitMQ entegrasyonu için
spring-rabbitmqbileşenini kullanın ProducerTemplate.asyncSendBody()ile async yayınlama uygulayın
Loglama
- Yapılandırılmış loglama için Logstash encoder ile Logback kullanın
- LogContext'i
SafeAutoCloseableile servis çağrıları boyunca yayın - İstek takibi için LogContext'e bağlamsal bilgi ekleyin
- Manuel logger oluşturma yerine
@Slf4jkullanın
Async İşlemler
- Bloklamayan I/O işlemleri için CompletableFuture kullanın
- Tamamlanmayı beklemek gerektiğinde
.join()çağırın - CompletableFuture'dan gelen exception'ları düzgün şekilde ele alın
- Takip için async işlemlere LogContext geçirin
Yapılandırma
- YAML yapılandırmasını kullanın (
quarkus-config-yaml) - Dev/test/prod ortamları için profil-duyarlı yapılandırma
- Hassas yapılandırmayı ortam değişkenlerine dışsallaştırın
- Tip-güvenli yapılandırma injection için
@ConfigPropertykullanın
Validation
- Resource katmanında
@Validile doğrulayın - DTO'larda Bean Validation annotasyonları kullanın
- Exception'ları
@Providerile uygun HTTP yanıtlarına eşleyin
Transaction'lar
- Veri değiştiren service metodlarında
@Transactionalkullanın - Transaction'ları kısa ve odaklı tutun
- Transaction'lar içinden async işlem çağırmaktan kaçının
Test
- Route testi için
camel-quarkus-junit5kullanın - Assertion'lar için AssertJ kullanın
- Tüm harici bağımlılıkları mock'layın
- Koşullu akış mantığını kapsamlı biçimde test edin
Quarkus'a Özgü
- En son LTS sürümünde kalın (3.x)
- Hot reload için Quarkus dev modunu kullanın
- Production hazırlığı için sağlık kontrolleri ekleyin
- Native derleme uyumluluğunu periyodik olarak test edin
