A camel can definitely help with this ...
One way is to use a separate queue and periodically repeat messages separately from the main thread (especially when performance is a problem). In addition, it provides a separate queue so that you can sort these error messages (view, clear, modify, repeat manually, etc.) ...
something like this ... see consumer survey for more details
//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); } }
If you land on a better solution, let me know ... good luck.
Ben oday
source share