RabbitMQ kullanıyorum ve e-posta iletileri içeren bir kuyruğum var. Tüketici hizmetim mesajları gönderiyor ve onları göndermeye çalışıyor. Herhangi bir sebeple, tüketicim mesajı gönderemezse, tekrar gönderilecek mesajı tekrar sıraya koyarım. Ben bir basicNack yapabileceğimi ve requeue flag'inin gerçek olmasını sağlayabileceğimin farkındayım, ancak mesajı süresiz olarak yeniden iletmek istemiyorum (eğer eposta sistemimiz bozulursa, sürekli mesajların tekrarlanmasını istemiyorum). Tekrar gönderilecek mesajı yeniden düzenleyebileceğim sınırlı sayıda tanımlamak istiyorum. E-posta mesajı nesnesinde bir alan ayarlayamıyorum, ancak, onu düşürdüğümde ve bir nack gönderdiğimde. Sıradaki iletide güncel alan yok. Buna yaklaşabileceğim başka bir yol var mı? Şimdiden teşekkürler.RabbitMQ'de yeniden deneme denemesi sayısını nasıl belirlerim?
cevap
RabbitMQ'da (AMQP protokolünde olduğu gibi) yeniden deneme denemeleri gibi bir özellik yoktur. Sonra ve bırakın ve - daha önce redelivered olmasaydı
yeniden teslim mesajı (Kütüphanenizin bunun için bazı arayüze sahip olmalıdır
redelivered
parametre yöntemibasic.deliver
kontrol):Olası çözüm yeniden deneme girişimleri davranışını sınırlamak uygulamak dead letter exchange'da yakalayın, sonra bir şekilde işleyin.
Her seferinde ileti yeniden yayınlanamaz, ancak başlık alanı artar veya azaltılır/azaltılır, yani
x-redelivered-count
(istediğiniz herhangi bir adı seçebilirsiniz). Bu durumda redeliveries üzerinde kontrol elde etmek için, bir sınırına ulaşıp ulaşmadığınızı kontrol etmelisiniz (üst veya alt - 0 benim tercihimdir, tcp/ip'ten ip başlığında a-lattl
). Redis, memcache veya diğer depolarda, mesela tekrar tekrar sayımla birlikte mysql'de ve daha sonra her bir yeniden dağıtım artış/azaltma değerinde, mesajın benzersiz anahtarını (uuid, ancak mesajı gönderdiğinizde manuel olarak ayarlamanız gerektiğini söyleyin) saklayın limite ulaşıncaya kadar.(gerçek geeksler için), istediğiniz gibi davranacak olan eklentiyi yazınız.
3. yanlısı olduğunu kuyruk kafasında redelivered mesaj konaklama. Uzun kuyruklarınız varsa veya ileti sırası sizin için önemliyse, bu önemlidir (not, bu yeniden gönderimler katı mesaj sırasını bozar, ayrıntılar için resmi belgelere veya this question on SO'a bakın).
P.S. .:
Orada bu konudaki similar answer olmakla php. Üzerinden bakın, belki biraz yardımcı olur (kelimesinden okumaya başlayın "Çevrim tekrarı sorunuyla başa çıkmak için birden çok teknik var".
Teşekkürler Ölü mektubu değişim yoluna gideceğim sanırım – user2689570
Ayrıca, yeniden deneme sayısını sınırlamak yerine mesaj ömrünü kısaltmak için zaman ayırmazsanız, her zaman bir TTL ayarlayabilirsiniz. –
- 1. iframe yeniden boyutlandırmayı nasıl belirlerim?
- 2. cURL PHP'de yeniden deneme
- 3. GAE'nin cron yeniden deneme parametreleri
- 4. Swift "yeniden deneme" mantığı istek üzerine
- 5. Bluebird Promise Yeniden Deneme BelgesiDB isteği
- 6. Aynı işçi kullanarak kereviz yeniden deneme nasıl yapılır?
- 7. ruby: komut dosyasının 3. yeniden deneme olup olmadığını nasıl öğrenebilirim?
- 8. scrollHeight'ı nasıl belirlerim?
- 9. Ghc versiyonumu nasıl belirlerim?
- 10. Bir hareket denemesi gerektiriyor mu?
- 11. NET'te özgeçmişi/yeniden deneme desteğiyle HTTP'den büyük dosya indirilsin mi?
- 12. dahili hata: henüz deneme ayarlı değil sınıfı yeniden deneyin
- 13. İçerik türünü Joomla'da nasıl belirlerim?
- 14. Deneme/çıkışta programdan nasıl çıkabilirim?
- 15. Polly framework CircuitBreakerAsync, istisna oluşursa yeniden deneme yapmaz.
- 16. HttpStatus durum koduna göre yeniden deneme için RetryPolicy ayarlanabiliyor mu?
- 17. java.net.HttpRetryException: Sunucu kimlik doğrulaması nedeniyle yeniden deneme yapamazsınız, akış modunda
- 18. İnternet bağlantısı geri geldiğinde yeniden deneme isteği - IOS
- 19. Telefon numarasının değişip değişmediğini nasıl belirlerim?
- 20. Nitelik varsayılan değerlerini sqlalchemy bildirgesinde nasıl belirlerim?
- 21. Node.js Kue başarısız işler nasıl yeniden başlatılır
- 22. Sanal yöntemi çağırmayı deneme
- 23. Arduino'da deneme/yakalama bloğu
- 24. ASP.NET Deneme web
- 25. XE2'de TSQLConnection bağlantı denemesi nasıl iptal edilir?
- 26. Tablo sırasının z dizinini nasıl belirlerim?
- 27. Windows Ortam değişkenlerini kalıcı olarak nasıl belirlerim?
- 28. PHP komut dosyalarının izin ayarlarını nasıl belirlerim?
- 29. Hangi platform sürümünün gerekli olduğunu nasıl belirlerim?
- 30. Glut'ta klavyenin yön tuşlarını nasıl belirlerim?
Bu blog yazısı neden kullanmak istediğinizi açıklayan oldukça iyi bir iş çıkarıyor Bu tür sorunları çözmek için .MyMusMQ içinde NServiceBus veya MassTransit gibi bir çerçeve: https://www.make-awesome.com/2017/12/sure-you-can-just-use-rabbitmq/ –