Spring Boot ile Olay Tabanlı Mimariler ve Mesajlaşma Sistemleri

Olay Tabanlı Mimari Nedir?
Olay tabanlı mimari, sistem bileşenlerinin birbirleriyle doğrudan iletişim kurmak yerine olaylar üzerinden haberleştiği bir yaklaşımdır. Bu mimari, bileşenlerin gevşek bağlı olmasını sağlar ve ölçeklenebilirliği artırır.
Spring Boot ve Spring Cloud Stream
Spring Boot, Spring Cloud Stream ile olay tabanlı mimariler ve mesajlaşma sistemleri için güçlü ve esnek bir çözüm sunar. Bu yazıda, Spring Boot uygulamalarınız için Spring Cloud Stream kullanarak olay tabanlı mimarileri nasıl uygulayacağınızı ele alacağız.
1. Spring Cloud Stream Projesi Oluşturma
Öncelikle, Spring Cloud Stream projesi oluşturmanız gerekmektedir.
Proje Oluşturma
Spring Initializr’ı kullanarak yeni bir Spring Boot projesi oluşturun ve aşağıdaki bağımlılıkları ekleyin:
- Spring Cloud Stream
- Spring Cloud Stream Binder (Kafka veya RabbitMQ)
Spring Cloud Stream Yapılandırması
application.properties
dosyasını şu şekilde yapılandırın (örneğin Kafka kullanıyorsanız):
spring.cloud.stream.bindings.input.destination=my-topic
spring.cloud.stream.bindings.output.destination=my-topic
spring.cloud.stream.kafka.binder.brokers=localhost:9092
Bu ayarlar, Kafka broker’ı kullanarak my-topic
adında bir konu oluşturur ve veri alışverişini sağlar.
2. Spring Cloud Stream Uygulama Sınıfı
src/main/java/com/example/stream/StreamApplication.java
dosyasını oluşturun:
package com.example.stream;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.integration.annotation.InboundChannelAdapter;
import org.springframework.integration.annotation.Poller;
@SpringBootApplication
@EnableBinding(Source.class)
public class StreamApplication {
public static void main(String[] args) {
SpringApplication.run(StreamApplication.class, args);
}
@InboundChannelAdapter(channel = Source.OUTPUT, poller = @Poller(fixedDelay = "1000"))
public String sendMessage() {
return "Hello, World!";
}
}
Bu sınıf, her saniye bir “Hello, World!” mesajı gönderen basit bir üreticiyi (producer) temsil eder.
3. Tüketici (Consumer) Yapılandırması
Bir tüketici uygulaması oluşturmak için aşağıdaki adımları izleyin.
Consumer Proje Oluşturma
Spring Initializr’ı kullanarak yeni bir Spring Boot projesi oluşturun ve aşağıdaki bağımlılıkları ekleyin:
- Spring Cloud Stream
- Spring Cloud Stream Binder (Kafka veya RabbitMQ)
Consumer Yapılandırması
application.properties
dosyasını şu şekilde yapılandırın:
spring.cloud.stream.bindings.input.destination=my-topic
spring.cloud.stream.kafka.binder.brokers=localhost:9092
Consumer Uygulama Sınıfı
src/main/java/com/example/consumer/ConsumerApplication.java
dosyasını oluşturun:
package com.example.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.integration.annotation.ServiceActivator;
@SpringBootApplication
@EnableBinding(Sink.class)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
@ServiceActivator(inputChannel = Sink.INPUT)
public void consumeMessage(String message) {
System.out.println("Received: " + message);
}
}
Bu sınıf, my-topic
konusundan mesajları tüketen basit bir tüketiciyi (consumer) temsil eder.
Sonuç
Bu makalede, Spring Boot ve Spring Cloud Stream kullanarak olay tabanlı mimarileri ve mesajlaşma sistemlerini nasıl uygulayacağınızı öğrendiniz. Bu mimari, mikroservislerin gevşek bağlı olmasını sağlar ve ölçeklenebilirliği artırır. Bir sonraki yazımızda, Spring Boot ile GraphQL kullanarak veri sorgulama ve yönetimini nasıl yapacağınızı ele alacağız.