Hi everybody,

I have an issue using the ActiveMQ with Camel's dead letter channel error
handler. The error handler is defined as follows:

    errorHandler(deadLetterChannel("activemq:DEADLETTER")
                .onRedelivery(new RedeliveryProcessor())
                .maximumRedeliveries(3)
                .redeliverDelay(100L)
                .useExponentialBackOff()
                .maximumRedeliveryDelay(1000L * 60 * 5));

The camel route is defined as:

    public static final String BEAN = "bean:";
    public static final String METHOD = "?method=";

    from("direct:start")
            .inOut()
            .to(BEAN + "handler" + METHOD + "printType")
            .to(BEAN + "handler" + METHOD + "doesNothing")
            .to(BEAN + "handler" + METHOD + "printType")
            .to(BEAN + "handler" + METHOD + "returnsListOfB")
            .to(BEAN + "handler" + METHOD + "printType")
            .split(body())
            .aggregationStrategy(new UseLatestAggregationStrategy())
            .to(BEAN + "handler" + METHOD + "throwsException");

where the methods do exactly what their names say. Class B is serializable
and the method "returnsListOfB" returns a list with 3 elements of type B.
After the splitter, there should be 3 individual objects of type B entering
the "throwsException" method, which is designed to throw a
NullPointerException. At the begining of the "throwsException" there is a
logging statement, so I can see that the method is being entered 4 times
(original attempt + 3 retries) for each of the 3 objects of type B.

Since I'm using the dead letter channel error handler and have defined a
DEADLETTER queue, I would expect those 3 objects of type B to eventually end
up in the DEADLETTER queue. This is exactly what happens, but only for a
brief moment. The messages that are eventually queued on a DEADLETTER queue
get dequeued and put onto the default ActiveMQ.DLQ. By the time the JUnit
test finishes, there are two messages on the ActiveMQ.DLQ and only one left
on the DEADLETTER queue. Now the biggest apsurd is that about 30 seconds
after the JUnit test finishes and JVM shuts down, the last message somehow
gets queued to the ActiveMQ.DLQ as well. I'm able to track the queue/dequeue
count by connecting to localhost:8161 from the Internet browser.

Does anybody have any idea why is this happening and how to prevent the
default deadletter queue ActiveMQ.DLQ from taking the mesasges from my
custom defined DEADLETTER queue? Is there some kind of known bug?

The version of Camel I'm using is 2.2.0 and ActiveMQ is 5.3.2.

Thank you for your answers!

Regards,
Frankie 
-- 
View this message in context: 
http://activemq.2283324.n4.nabble.com/Problem-using-custom-defined-deadletter-queue-tp3135867p3135867.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to