MassTransit ve RabbitMQ

Cenker Kumlucalı
2 min readJul 13, 2023

--

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.

--

--

No responses yet