2011-05-19 33 views
7

Ben gerçekten iletileri kaybetmemeyi tercih ediyorum ActiveMQ bir sistem üzerinde çalışıyorum. Sorun şu ki, yeniden denenen mesajlar, tüketicilerimin engellenmesine neden oluyor (işleyebileceği mesajlar üzerinde çalışmak yerine). Yeniden denemek için birkaç gün içinde başarısız mesajlar vermek istiyorum (örneğin, potansiyel hedeflerimden biri, SFTP üzerinden erişebileceğim başka bir sunucu olabilir), ancak birkaç gün boyunca bir tüketicinin engellemesini istemiyorum - - Diğer mesajlarda çalışmaya devam etmesini istiyorum.Gelecekte bir noktada iletileri yeniden denemek (ActiveMQ)

Aracıya iletiyi daha sonra yeniden göndermesini söylemenin bir yolu var mı? Şu anda sıradaki mesajı alıp bir gecikmeyle ele alıyorum ama daha basit bir yol olup olmadığını merak ediyorum. Apache Camel kullanıyorum, bu yüzden bir çözüm de iyi olurdu. Deve kesinlikle bu yardımcı olabilir

cevap

5

...

bir yolu ayrı kuyruğu kullanmak ve periyodik olarak ana akım (performans bir endişe özellikle) ayrı iletileri yeniden denemektir. Ayrıca, bu böyle

şey ... Daha fazla bilgi

//main route to process message from a queue (needs to be fast) 
from("activemq:queue:mainQ").process(...); 

//handle any errors by simply moving them to an error queue (for retry later) 
onException(Exception.class) 
    .handled(true).to("activemq:queue:mainErrorQ"); 

//retry the error queue 
from("timer://retryTimer?fixedRate=true&period=60000") 
    .bean(myBean, "retryErrors"); 

... 

public void retryErrors() { 
    // loop to empty queue 
    while (true) { 
     // receive the message from the queue, wait at most 3 sec 
     Exchange msg = consumer.receive("activemq:queue.mainErrorQ", 3000); 
     if (msg == null) { 
      // no more messages in queue 
      break; 
     } 

     // send it to the starting queue 
     producer.send("activemq:queue.mainQ", msg); 
    } 
} 
için polling consumer bkz ... sen (vb, net bir görüş, değiştirmek, elle yeniden denemek) bu hata mesajları triyaj izin vermek ayrı bir kuyruk sağlar daha iyi bir çözüm üzerinde ulaşırsanız

, iyi şanslar ... bana bildirin

+0

'" daha iyi bir çözüm üzerinde arazi varsa, bana bildirin desteği vardır .. . iyi şanslar sadece merak ediyorum. Şimdi bu problem için etter çözümü? Şu anda – AlanFoster

+0

, daha iyi bir çözümüm yok. PollEnrich() EIP kullanarak bunu yapmak için biraz destek eklemeye başladım, ancak şu an için masaya yatırıldı ... bkz .: https://issues.apache.org/jira/browse/CAMEL-3211 –

+0

Ah tamam, ben Şu anki çözümünüze şimdi tutun, teşekkürler! – AlanFoster

İlgili konular