NET Core ile RabbitMQ Kullanımı
Bu makalede, .NET Core platformu ve RabbitMQ mesaj kuyruğu sistemini kullanarak uygulamalar arasında etkili, güvenilir ve ölçeklenebilir bir mesaj iletişimini nasıl sağlayabileceğinizi öğreneceksiniz. RabbitMQ, asenkron ve dağıtık sistemler arasında mesajların güvenli bir şekilde iletilmesini kolaylaştıran açık kaynaklı bir mesaj kuyruğu yazılımıdır.
RabbitMQ Nedir?
RabbitMQ, mesaj kuyrukları aracılığıyla farklı uygulamalar arasında asenkron iletişimi sağlamak için kullanılan güçlü bir araçtır. İletişimde güvenilirlik, esneklik ve ölçeklenebilirlik sağlayarak mikroservis mimarileri ve dağıtık sistemler için ideal bir çözümdür.
.NET Core ve RabbitMQ İlk Adımlar: İlk olarak, .NET Core ve RabbitMQ entegrasyonu için gerekli olan RabbitMQ.Client kütüphanesini projenize ekleyelim.
dotnet new console -n RabbitMQIntegration cd RabbitMQIntegration dotnet add package RabbitMQ.Client
RabbitMQ Bağlantısı Kurma: RabbitMQ ile iletişim kurabilmek için bir bağlantı oluşturmamız gerekiyor. Bağlantı, RabbitMQ sunucusuna erişim sağlamamıza yardımcı olacaktır. Aşağıdaki gibi bir
RabbitMQService sınıfı oluşturalım:
using RabbitMQ.Client;
public class RabbitMQService
{
private readonly IConnection _connection;
public RabbitMQService(string hostName)
{
var factory = new ConnectionFactory() { HostName = hostName };
_connection = factory.CreateConnection();
}
public IModel CreateModel()
{
return _connection.CreateModel();
}
}
Mesaj Gönderme: RabbitMQ üzerinden mesaj göndermek için bir yayın (exchange) ve kuyruk (queue) oluşturmalı ve mesajları bu kuyruğa göndermeliyiz. Aşağıdaki gibi bir
MessagePublisher sınıfı oluşturalım:
using RabbitMQ.Client;
using System.Text;
public class MessagePublisher
{
private readonly IModel _channel;
public MessagePublisher(RabbitMQService rabbitMQService, string exchangeName, string routingKey)
{
_channel = rabbitMQService.CreateModel();
_channel.ExchangeDeclare(exchange: exchangeName, type: ExchangeType.Direct);
_channel.QueueDeclare(queue: routingKey, durable: false, exclusive: false, autoDelete: false, arguments: null);
_channel.QueueBind(queue: routingKey, exchange: exchangeName, routingKey: routingKey);
}
public void PublishMessage(string message)
{
var body = Encoding.UTF8.GetBytes(message);
_channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);
}
}
Mesaj Alımı: Mesaj alımı için de bir tüketici (consumer) sınıfı oluşturalım. Bu sınıf, belirli bir kuyruktan mesajları alacak ve işleyecektir.
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;
public class MessageConsumer
{
private readonly IModel _channel;
public MessageConsumer(RabbitMQService rabbitMQService, string queueName)
{
_channel = rabbitMQService.CreateModel();
var consumer = new EventingBasicConsumer(_channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
Console.WriteLine($" [x] Mesaj alındı: {message}");
};
_channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer);
}
}
Uygulama Senaryosu: Şimdi, yukarıda oluşturduğumuz sınıfları kullanarak bir örnek uygulama senaryosu oluşturalım. Bir mikroservis, bir mesaj gönderirken diğer mikroservis bu mesajı alacak.
class Program
{
static void Main()
{
var rabbitMQService = new RabbitMQService("localhost");
// Mesaj gönderen mikroservis
var messagePublisher = new MessagePublisher(rabbitMQService, "MicroservicesExchange", "MicroservicesQueue");
messagePublisher.PublishMessage("Merhaba, RabbitMQ!");
// Mesaj alan mikroservis
var messageConsumer = new MessageConsumer(rabbitMQService, "MicroservicesQueue");
Console.WriteLine("Uygulama başarıyla çalıştı. Çıkış yapmak için bir tuşa basın.");
Console.ReadLine();
}
}
Bu örnek uygulama senaryosunda, bir mikroservis mesaj gönderirken diğer mikroservis bu mesajı alacak şekilde bir iletişim kurulmuştur.
Sonuç: Bu makalede, .NET Core platformu ve RabbitMQ mesaj kuyruğu kullanarak uygulamalar arasında güvenilir ve ölçeklenebilir bir mesaj iletişimini nasıl sağlayacağınızı öğrendik. RabbitMQ’nun sunduğu esneklik ve güvenilirlikle, dağıtık sistemlerinizi daha etkili bir şekilde inşa edebilirsiniz.
Hasan Asla (Software Developer)