Dead Letter Exchange (DLX) ve Dead Letter Queue (DLQ) ile Derinlemesine RabbitMQ

Cenker Kumlucalı
2 min readAug 14, 2023

--

Merhaba, değerli okuyucular! RabbitMQ serimize kaldığımız yerden devam ediyoruz. Bugünkü bölümümüzde Dead Letter Exchange (DLX) ve Dead Letter Queue (DLQ) kavramlarına odaklanacağız.

DLX ve DLQ Nedir?

DLX, mesajın belirli nedenlerle tüketilemediği durumlarda yönlendirildiği özel bir exchange türüdür. DLQ ise bu exchange üzerinden mesajları alan özel bir kuyruktur.

Neden DLX ve DLQ’ya İhtiyaç Duyarız?

  • Bir mesajın TTL (Time-To-Live) süresi dolmuşsa.
  • Kuyruk kapasitesi dolmuşsa ve yeni mesajlar için yer yoksa.
  • Mesaj, consumer tarafından NACK veya REJECT alırsa.

Bu gibi durumlarda, mesajlar doğrudan silinmek yerine DLX ve DLQ üzerinden işlenir, böylece bu mesajlar üzerinde daha sonrasında farklı işlemler gerçekleştirilebilir.

C# ile DLX ve DLQ Kullanımı

Öncelikle, bir RabbitMQ bağlantısı oluşturup, bir dead-letter-exchange ve buna bağlı bir dead-letter-queue tanımlayalım.

var factory = new ConnectionFactory() { HostName = "localhost" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();

channel.ExchangeDeclare("dead-letter-exchange", "direct");
var arguments = new Dictionary<string, object>
{
{"x-dead-letter-exchange", "dead-letter-exchange"}
};
channel.QueueDeclare("dead-letter-queue", true, false, false, arguments);
channel.QueueBind("dead-letter-queue", "dead-letter-exchange", "dead-routing-key");

Şimdi, bir ana kuyruk tanımlayalım. Bu kuyrukta, belirli bir süre sonra işlenmeyen mesajlar otomatik olarak DLX’e yönlendirilecek.

channel.QueueDeclare("my-queue", true, false, false, arguments);

Mesajı gönderelim:

var body = Encoding.UTF8.GetBytes("Dead Letter Test Message");
var properties = channel.CreateBasicProperties();
properties.Persistent = true;
properties.Expiration = "5000"; // 5 saniye TTL

channel.BasicPublish("", "my-queue", properties, body);

Eğer bu mesaj 5 saniye içerisinde tüketilmezse, otomatik olarak dead-letter-queue'ya yönlendirilir.

Özet

DLX ve DLQ, RabbitMQ’da mesajların güvenilir bir şekilde işlenmesini sağlayan önemli kavramlardır. Mesaj kaybını önlemek, sistemin dirençliliğini artırmak ve hataları daha etkili bir şekilde yönetmek için bu yapıları kullanabilirsiniz.

RabbitMQ serimizin bir sonraki bölümünde başka heyecan verici konuları ele alacağız. Takipte kalın! 🚀

--

--

No responses yet