MassTransit ve RabbitMQ
MassTransit, .NET tabanlı bir açık kaynaklı mesajlaşma kütüphanesidir. Bu kütüphane, asenkron mesajlaşma, olay tabanlı mimari ve mikro hizmetler gibi uygulama geliştirmenin bazı zorluklarını hafifletmeyi hedefler. RabbitMQ ise, açık kaynak bir mesaj kuyruğu yazılımıdır ve MassTransit, RabbitMQ ile sorunsuz bir şekilde entegre olabilme özelliğine sahiptir.
MassTransit kütüphanesini kullanarak RabbitMQ’yu entegre etmek için aşağıdaki adımları takip edebilirsiniz:
Adım 1: Proje Oluşturma ve Bağımlılıkları Ekleme
Öncelikle, bir C# projesi oluşturmanız ve MassTransit ve RabbitMQ bağımlılıklarını projenize eklemeniz gerekmektedir. Bunun için NuGet Paket Yöneticisi’ni kullanabilirsiniz.
Adım 2: RabbitMQ Bağlantı Ayarlarını Yapılandırma
RabbitMQ ile iletişim kurmak için, bağlantı ayarlarınızı yapılandırmanız gerekmektedir. Bu ayarlar, host adresi, kullanıcı adı, şifre, sanal anahtar vb. bilgileri içerecektir. Bunları uygulamanızın yapılandırma dosyasına (örneğin, appsettings.json) ekleyebilirsiniz.
{
"RabbitMQ": {
"Host": "localhost",
"Username": "guest",
"Password": "guest",
"VirtualHost": "/"
}
}
Adım 3: Mesaj İletişimi Tanımlama
MassTransit ile mesajlar arasındaki iletişimi tanımlamak için, mesaj türlerini ve mesaj alıcılarını (consumer) belirlemeniz gerekmektedir. Aşağıda, basit bir IOrderSubmitted
mesajı tanımı ve bu mesajı işleyen bir tüketici (consumer) sınıfı örneği verilmiştir:
public interface IOrderSubmitted
{
Guid OrderId { get; }
decimal TotalAmount { get; }
}
public class OrderSubmittedConsumer : IConsumer<IOrderSubmitted>
{
public async Task Consume(ConsumeContext<IOrderSubmitted> context)
{
// Gelen mesajı işleme kodu burada yer alır
await Console.Out.WriteLineAsync($"Sipariş alındı - ID: {context.Message.OrderId}, Toplam Tutar: {context.Message.TotalAmount}");
}
}
Adım 4: RabbitMQ’ya Bağlanma ve Mesaj Gönderme
MassTransit kütüphanesini kullanarak RabbitMQ’ya bağlanmak ve mesaj göndermek için aşağıdaki kod örneğini kullanabilirsiniz:
static async Task Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(new Uri("rabbitmq://localhost/"), h =>
{
h.Username("guest");
h.Password("guest");
});
cfg.ReceiveEndpoint(host, "order_queue", e =>
{
e.Consumer<OrderSubmittedConsumer>();
});
});
await busControl.StartAsync();
try
{
// Sipariş gönderimi için mesaj oluşturma
var orderSubmittedMessage = new OrderSubmitted
{
OrderId = Guid.NewGuid(),
TotalAmount = 99.99m
};
// Mesajı gönderme
await busControl.Publish<IOrderSubmitted>(orderSubmittedMessage);
Console.WriteLine("Sipariş gönderildi. Çıkmak için herhangi bir tuşa basın...");
Console.ReadKey();
}
finally
{
await busControl.StopAsync();
}
}
Yukarıdaki örnekte, appsettings.json
dosyasından RabbitMQ bağlantı ayarlarını alıyoruz. Ardından, Bus.Factory.CreateUsingRabbitMq
yöntemini kullanarak bir busControl
örneği oluşturuyoruz. Mesajların alındığı ve işlendiği "order_queue" adında bir kuyruk oluşturuyoruz. Son olarak, bir sipariş göndermek için busControl.Publish
yöntemini kullanıyoruz.
Bu örnekte, OrderSubmittedConsumer
sınıfı IOrderSubmitted
mesajını işlemek için kullanılır. Mesaj gönderildiğinde, Consume
yöntemi otomatik olarak çağrılır ve mesajın içeriği işlenir.
MassTransit kütüphanesi, özellikle dağıtılmış sistemlerde mesaj tabanlı iletişimi kolaylaştırmak için güçlü bir araçtır. RabbitMQ gibi bir mesaj kuyruğuyla entegre olarak kullanıldığında, ölçeklenebilir ve esnek uygulamalar geliştirmenizi sağlar.