Tüketici mesajı aldığında ve işlem görevi tamamlandığında, sunucuya mesajın alındığını ve işlemin tamamlandığını bildirmek için bu mesaj tanımlayıcısıyla bir ack gönderir. RabbitMQ, mesajı işleyen tüketicinin bağlantısının kaybolmasını bekler, sonra mesajın doğru işlenmediğini belirler, bu yüzden RabbitMQ mesajı yeniden iletir. Mesaj onayı varsayılan olarak kapalıdır. Tüketici başlatılırken bir noAck parametresi vardır,Doğruya ayarlandığında, tüketici mesajı alır almaz ack döner.。
Genel olarak, yaygın olarak kullanılan senaryo noack genellikle doğru olarak ayarlanır, ancak yüksek riskli gereksinimleri olan projeler için, örneğin ödeme gibi. Her mesaj için onun bütünlüğünü ve doğruluğunu sağlamamız gerekiyor. Mesajı aldıktan sonra, doğru iş mantığının yürütüldüğünü doğrulamanız ve ardından sunucuya aktif olarak bir ack göndermeniz gerekir. Kuyruk içindeki mesajları rabbitmqctl list_queues isim message_rady message_unacknowleded komutu üzerinden veya arka plan yönetim arayüzü üzerinden görebilirsiniz.
Eğer noAck false olarak ayarlanmışsa, istemci sunucuya aktif olarak bir ack göndermelidir ve istemci mesajı onaylamazsa aşağıdaki durum ortaya çıkar:
Program devam ettiği sürece, bu 10 mesaj izlenmeden kalıyor ve RabbitMQ tarafından tekrar iletinemez. Daha da güçlü olan ise şuRabbitMQ mesaj tüketiminin zaman aşım mekanizması yoktur, yani, program yeniden başlatılmazsa, mesaj her zaman Unacked durumunda olur. Operasyon etkinlikleri üzerinde çalışırken bu kaçınılmadan alınmış durum mesajlarını unutmayın.
Hazır
Bu duruma sahip mesajlar işlenilecek kuyruk içinde bulunur.
Kabul edilmedi
Bu durumdaki bir mesaj, işlemin zaten işlenildiğini ancak onaylanmadığını gösterir.
Program kapalı olduğunda (Tüketici kapalı olduğu sürece), bu 10 mesaj Hazır duruma geri döner.
Onay mesajı
Ya istemci sunucuya ack gönderirse? Yani, mesajın alındığını mı onaylayalım? Kod şöyledir:
BasicAck metodunun ikinci parametresi olan çoklu olarak yanlış olarak ayarlandığında, RabbitMQ mevcut mesajın onaylandığını bildirir.Doğruysa, ilk parametre tarafından belirtilen teslimat etiketinden daha küçük ek bir mesaj onaylanır。 (Toplu onay tüm kanal içindir)
Onay iptal
Dağıtılmış programın istemcilerinden birinin istisna olması ve mesajın onayını iptal etmek ve diğer istemcilerin mesajı işlemesine izin vermek isterse ne olur?
Tüketim mesajında bir istisna olduğunda, onayı iptal etmemiz gerekir ve ardından Channel'ın basicReject yöntemini kullanabiliriz.
İlk parametre teslimat etiketini belirtirken, ikinci parametre bu arıza mesajının nasıl işleneceğini açıklar.True değeri, mesajın tekrar kuyruk başlığına konması, false değeri ise mesajın terk edildiği anlamına gelir。
|