Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The information can be reached from Java code with:

Code Block

List<MessageHistory> list = exchange.getProperty(Exchange.MESSAGE_HISTORY, List.class);
...

...

The Message History can be enabled or disabled per CamelContext or per route. For example you can turn it off with

Code Block

camelContext.setMessageHistory(false);

Or from XML DSL with

Code Block
xml
xml

<camelContext messageHistory="false" ...>
...
</camelContext>

...

If Message History is enabled, then Camel will leverage this information, when the Error Handler logs exhausted exceptions. Then in addition to the caused exception with its stacktrace, you can see the message history; you may think this as a "route stacktrace". And example is provided below:

Code Block

2013-05-31 14:41:28,084 [ - seda://start] ERROR DefaultErrorHandler            - Failed delivery for (MessageId: ID-davsclaus-air-lan-55446-1370004087263-0-1 on ExchangeId: ID-davsclaus-air-lan-55446-1370004087263-0-3). Exhausted after delivery attempt: 1 caught: java.lang.IllegalArgumentException: Forced to dump message history

Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
[route1            ] [to1               ] [log:foo                                                                       ] [         6]
[route1            ] [to2               ] [direct:bar                                                                    ] [       102]
[route2            ] [to5               ] [log:bar                                                                       ] [         1]
[route2            ] [delay2            ] [delay[{100}]                                                                  ] [       100]
[route2            ] [to6               ] [mock:bar                                                                      ] [         0]
[route1            ] [delay1            ] [delay[{300}]                                                                  ] [       303]
[route1            ] [to3               ] [log:baz                                                                       ] [         0]
[route1            ] [process1          ] [org.apache.camel.processor.MessageHistoryDumpRoutingTest$1$1@6a53f9d8         ] [         2]

Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
java.lang.IllegalArgumentException: Forced to dump message history
	at org.apache.camel.processor.MessageHistoryDumpRoutingTest$1$1.process(MessageHistoryDumpRoutingTest.java:54)
	at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)
	at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:388)
	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:189)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
	at org.apache.camel.processor.DelayProcessorSupport.process(DelayProcessorSupport.java:117)
	at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:388)
	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:189)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
	at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
	at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:189)
	at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:293)
	at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:202)
	at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:149)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:722)

You can turn off logging message history from the Error Handler using

Code Block

errorHandler(defaultErrorHandler().logExhaustedMessageHistory(false));

From Camel 2.17 onwards the Error Handler do not log the message body/header details anymore (to avoid logging sensitive message body details). You can turn on the old behavior.

Code Block
errorHandler(defaultErrorHandler().logExhaustedMessageBody(true));

 

Include Page
Using This Pattern
Using This Pattern