Büyük ve monolitik sistemleri yönetmek zamanla bir kabusa dönüşebilir. Mikroservisler, bu karmaşıklığı küçük, bağımsız ve kendi sınırları olan parçalara bölerek çözmeyi hedefler. Peki bu servisler birbiriyle nasıl konuşmalıdır? İşte Event-Driven (olay güdümlü) iletişimin gücü.
Senkron vs Asenkron İletişim
Servisler arası iletişimde doğrudan HTTP/REST kullanmak, servisleri birbirine sıkı sıkıya bağlar (tight coupling). Bir servis çöktüğünde diğeri de yanıt veremez hale gelebilir. Event-Driven mimaride ise servisler doğrudan konuşmak yerine bir mesaj kuyruğuna (Message Broker) olay (event) fırlatırlar.
// (c) CodeMareFi - codemarefi.com.tr
// Node.js ile RabbitMQ üzerinden event fırlatma (Producer) örneği
const amqp = require('amqplib');
async function sendOrderEvent(orderData) {
const connection = await amqp.connect('amqp://localhost');
const channel = await connection.createChannel();
const queue = 'order_events';
await channel.assertQueue(queue, { durable: true });
channel.sendToQueue(queue, Buffer.from(JSON.stringify(orderData)));
console.log(" [x] Sipariş olayı gönderildi: ", orderData);
}
Event-Driven Mimarinin Avantajları
Mesaj kuyrukları (RabbitMQ, Apache Kafka, BullMQ) sayesinde servisleriniz asenkron çalışır. Bir servis yoğunluktan dolayı yavaşlasa bile mesaj kuyrukta birikir ve çökme yaşanmaz. Bu da sisteme muazzam bir esneklik (loose coupling) ve yüksek ölçeklenebilirlik kazandırır.
