Node.js ile RabbitMQ Kullanımı: Mesaj Kuyruğu ile Veri Akışı

Posted by

Merhaba arkadaşlar, bu yazımda sizlere Node.js ile RabbitMQ Kullanımı: Mesaj Kuyruğu ile Veri Akışı
konusundan bahsedeceğim.

Günümüzde, uygulama geliştiriciler için performans, ölçeklenebilirlik ve esneklik kritik öneme
sahiptir. Node.js gibi asenkron programlama modellerine dayanan teknolojiler, bu ihtiyaçlara
cevap verirken RabbitMQ gibi mesaj kuyruğu sistemleriyle birleştirildiğinde, güçlü bir
iletişim altyapısı sunar.

RabbitMQ’nun Avantajları

  • Asenkron İletişim: İstemci ve sunucunun eşzamanlı çalışması gerekmez.
  • Güvenilir Mesajlar: RabbitMQ mesajları disk tabanlı olarak saklayabilir.
  • Ölçeklenebilirlik: Mesaj kuyruğu, yatay ölçeklenebilir.
  • Birçok Dilde Destek: RabbitMQ, Node.js dahil olmak üzere çeşitli programlama dilleriyle kullanılabilir.

Node.js ve RabbitMQ ile Mesaj Kuyruğu Sistemi Örneği

1. RabbitMQ Kurulumu

Bilgisayarımızda RabbitMQ kurulu değil ise öncelikle bunun kurulumunu sağlamamız gerekmektedir. Kurulumu Docker üzerinde gerçekleştireceğiz.

Kurulum için RabbitMQ Docker Üzerinde Kurulumu yazımı inceleyebilirsiniz.

Kurulum sağlandıktan sonra aşağıdaki komut ile RabbitMQ’yu çalıştırabilirsiniz.

docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management

Bu komut ile yönetim arayüzüne (http://localhost:15672) erişim sağlayabilirsiniz. Kullanıcı adı ve şifre varsayılan olarak “guest” / “guest”tir.

2. Proje Kurulumu

Bir Node.js projesi oluşturun ve gerekli bağımlılıkları yükleyin:

mkdir rabbitmq-example
cd rabbitmq-example
npm init -y
npm install amqplib

3. Basit Bir Kuyruk Uygulaması

Mesaj Gönderen (Producer)

Aşağıdaki kod, RabbitMQ’ya mesaj gönderen basit bir producer uygulamasıdır:

const amqp = require('amqplib');

async function sendMessage() {
  try {
    const connection = await amqp.connect('amqp://localhost');
    const channel = await connection.createChannel();

    const queue = 'myQueue';
    const message = 'Merhaba RabbitMQ!';

    await channel.assertQueue(queue, { durable: false });
    channel.sendToQueue(queue, Buffer.from(message));

    console.log(`Mesaj gönderildi: ${message}`);

    setTimeout(() => {
      connection.close();
    }, 500);
  } catch (error) {
    console.error('Hata:', error);
  }
}

sendMessage();

Mesaj Tüketen (Consumer)

RabbitMQ’dan mesaj tüketen bir consumer oluşturalım:

const amqp = require('amqplib');

async function consumeMessage() {
  try {
    const connection = await amqp.connect('amqp://localhost');
    const channel = await connection.createChannel();

    const queue = 'myQueue';

    await channel.assertQueue(queue, { durable: false });
    console.log('Mesajlar bekleniyor...');

    channel.consume(queue, (msg) => {
      console.log(`Mesaj alındı: ${msg.content.toString()}`);
      channel.ack(msg);
    });
  } catch (error) {
    console.error('Hata:', error);
  }
}

consumeMessage();

4. Çalıştırma

  • Producer kodunu çalıştırın:
node producer.js
  • Ardından, consumer kodunu başka bir terminalde çalıştırın:
node consumer.js

Consumer, producer tarafından gönderilen mesajı konsola yazdıracaktır.

RabbitMQ, Node.js ile birleştirildiğinde asenkron iletişim ve mikro servis mimarileri için etkili bir çözüm sunar. Bu yazıda basit bir mesaj kuyruğu sistemi oluşturduk. Kuyruk sisteminin çok daha karmaşık senaryoları desteklediğini unutmayın.

Umarım faydalı olur.

Bir sonraki yazıda görüşmek üzere…

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir