Herkese merhaba!

Uzun yıllardır bol miktarda kişisel zaman ve enerji harcayarak bilgimizi hepinizle paylaşıyoruz. Ancak şu andan itibaren bu blogu çalışır durumda tutabilmek için yardımınıza ihtiyacımız var. Yapmanız gereken tek şey, sitedeki reklamlardan birine tıklamak olacaktır, aksi takdirde hosting vb. masraflar nedeniyle maalesef yayından kaldırılacaktır. Teşekkürler.

RabbitMQ'da Dead Letter Exchange'in (DLX) ne olduğunu bildiğinizi varsayıyorum. Eğer bilmiyorsanız, dökümanları okumalısınız. Kısacası, mesajınız herhangi bir nedenle tüketilmezse, araştırma için başka bir kuyruğa girer. Dead Letter Exchange ve kuyruğun diğerlerinden önce tanımlandığından emin olun, aksi takdirde iletiler sessizce düşürülür.


Kurulum


Çalışan bir tüketici uygulamanız olduğunu varsayalım. Buna bir Dead Letter Exchange ve kuyruk ekleyelim.


# The current properties
ExchangeType: direct
ExchangeName: user
RoutingKey: create
QueueName: user_create

# New DLX properties
ExchangeType: fanout
ExchangeName: user_dlx
QueueName: user_create_dlx

Yeni DLX bildirimleri


Diğeri ne olursa olsun değişim türünü (exchange) fanout olarak belirleyin.


if err := channel.ExchangeDeclare(
"user_dlx",
"fanout",
true,
false,
false,
false,
nil,
); err != nil {
return err
}

if _, err := channel.QueueDeclare(
"user_create_dlx",
true,
false,
false,
false,
nil,
); err != nil {
return err
}

if err := channel.QueueBind(
"user_create_dlx",
"",
"user_dlx",
false,
nil,
); err != nil {
return err
}

Değişiklikler


Yapılandırmaya amqp.Table{"x-dead-letter-exchange": "user_dlx"}, ekini ekliyoruz. Bu mevcut kuyruğunuza gider.


if _, err := channel.QueueDeclare(
"user_create",
true,
false,
false,
false,
amqp.Table{"x-dead-letter-exchange": "user_dlx"},
); err != nil {
return err
}

Test


Tüketicide aşağıdaki kodu kullanırsanız, ileti orijinal kuyruktan çıkarılır ve DLX kuyruğuna konur.


message.Nack(false, false)