Верблюд определенно может помочь с этим ...
Один из способов - использовать отдельную очередь и периодически повторять сообщения отдельно от основного потока (особенно если речь идет о производительности). Кроме того, это обеспечивает отдельную очередь, позволяющую обрабатывать эти сообщения об ошибках (просмотр, очистка, изменение, повторная попытка вручную и т. Д.) ...
как-то так ... см. опрос потребителей для более подробной информации
//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);
}
}
Если вы нашли лучшее решение, дайте мне знать ... удачи