RabbitMQ - Onaylama (Acknowledgement) Modları

RabbitMQ - Onaylama (Acknowledgement) Modları

RabbitMQ de Onaylama Modlarına bir göz atalım.

  Mesaj kuyruğu sistemi olan RabbitMQ, bir kaynaktan aldığı mesajı sırasıyla iletir. İletilen bu mesajların onaylanması demek, mesajı gönderen ile alan arasında bir anlaşma olarak algılanabilir. Alıcı kendisine gelen mesajı onaylayarak mesajdan sorumlu tutulur. Onaylama modları alıcılar tarafından kullanılan bir özelliktir. Eğer herhangi bir onaylama modu belirtilmezse, varsayılan olarak gönderici tarafından mesajın iletildiğini ve alıcı tarafından otomatik olarak mesajın kabul edildiği anlaşılacaktır.

  Diğer bir taraftan ise, sorumluluk almak isteyen alıcı bunu durumlara göre kabul etmek isteyebilir. Mesajı aldıktan sonra kendi işlemlerini yapabilir. İşlemlerini başarıyla tamamladıktan sonra gelen mesajı onaylayabilir. Burada herhangi bir terslik olduğunu anladığında bu sorumluluğu almak istemez. Bu yüzden mesajı onaylamaz ve reddeder. Gönderici ise olumsuz durum olduğunu anlar ve mesajı başka bir alıcıya teslim etmeyi veya yapısına göre yeniden tekrar göndermeyi deneyebilir.

  Kısaca baktığımızda karşılıklı olarak bir sorumluluk sahibi belirleme olarak da nitelendirilebilir.  

Peki Onaylama Modları Nelerdir ?

  Alıcı bir gönderene abone olduğunda bunu 3 şekilde belirtebilir. 

  • auto - varsayılan
  • client
  • client-individual

 

  Alıcı abone olurken onaylama modunu belirtmezse, varsayılan olarak auto modunu kabul eder. Onaylama modu auto olduğunda ise otomatik olarak sorumluluğu üzerine alır ve tüm mesajları onaylar. Alıcı olumlu veya olumsuz onaylama mesajı göndermesine gerek kalmaz. Gönderici tüm mesajların iletildiğini anlar. 

 client.subscribe(destination,
    function(message) {
      // mesaj işleme
    }
  );

client.subscribe(destination,
    function(message) {
      // mesaj işleme
    },
    {'ack': 'auto'}
  );

 

 

  Onaylama modlarından client veya client-individual kullanılıyorsa, alıcı göndericiye olumlu veya olumsuz mesajın alındı bildirisini göndermek zorundadır. Alıcı mesaj alımında başarısız olursa ve bunu bildirirse, gönderici mesajın iletilmediğini anlar ve yeniden göndermeyi dener.

  Client ile client-individual arasındaki fark ise alıcının mesajı ve daha önce teslim edilen tüm mesajları kabul edeceğidir. Client-individual modu kullanıldığında sadece gönderilen mesaj kabul edilir. 

 client.subscribe(destination,
    function(message) {
      // mesaj işleme
      // onaylama
      // mesaj başarılı ise ack()
      message.ack();
      // mesaj olumsuz ise nack()
        message.nack();
    },
    {'ack': 'client'}
  );

  

RabbtMQ Dökümanhttps://www.rabbitmq.com/confirms.html

StompJS Kütüphanesi

 


Winners focus on winning, losers focus on winners! 👨 💻 🎧

Yorum ekle