| = BacklogDebugger |
| |
| Camel supports a backlog debugger that is used for live debugging of |
| messages that are routed in Camel. |
| The backlog debugger has additional functionality for easier debugging |
| aimed at tooling, than the Debugger. The backlog |
| debugger is exposed in JMX in the tracer node with the name |
| `BacklogDebugger`. The JMX API is defined in the |
| `org.apache.camel.api.management.mbean.ManagedBacklogDebuggerMBean` |
| interface. |
| |
| You can enable or disable the BacklogDebugger dynamically, by calling |
| `enableDebugger` or `disableDebugger` methods. |
| |
| NOTE: This requires to enabled JMX by including `camel-management` JAR in the classpath. |
| |
| == Options |
| |
| [width="100%",cols="10%,20%,70%",options="header",] |
| |======================================================================= |
| |Option |Default |Description |
| |`bodyIncludeFiles` |`true` |Whether to include the message body of file based messages. The overhead is that the file content has to be read from the file. |
| |`bodyIncludeStreams` |`false` |Whether to include the message body of stream based messages. If enabled then beware the stream may not be re-readable later. See more about Stream Caching. |
| |`bodyMaxChars` |`32kb` |To limit the message body to a maximum size in the traced message. Use 0 or negative value to use unlimited size. |
| |`includeExchangeProperties` |`true`|Whether to include the exchange properties in the traced message. |
| |`includeExchangeVariables` |`true`|Whether to include the exchange variables in the traced message. |
| |`standby` | `false` |Whether the debugger is standby. If a debugger is in standby then the debugger is activated during startup and are ready to be enabled manually via JMX or calling the enableDebugger method. |
| |`enabled` |`false` |Whether the debugger is enabled or not. |
| |`singleStepMode` |`false` |Whether currently in single step mode of a single Exchange. |
| |`singleStepLast` |`false` |In single step mode, then when the exchange is complete, then simulate a breakpoint as last, that allows to suspend and watch the exchange when complete (you can see message body as response, failed exception etc). |
| |======================================================================= |
| |
| == Operations |
| |
| [width="100%",cols="10%,20%,70%",options="header",] |
| |======================================================================= |
| |Option |Type |Description |
| |`addBreakpoint(nodeId)` |`void` |To add a breakpoint at the given node. |
| |`addConditionalBreakpoint(nodeId, language, predicate)` |`void` |To add a conditional breakpoint at the given node. The predicate is created from the language parameter. |
| |`disableBreakpoint(nodeId)` |`void` |To disable a breakpoint. |
| |`disableDebugger` |`void` |To disable the debugger |
| |`dumpTracedMessagesAsXml(nodeId)` |`String` |To dump the debugged messages from the give node id in XML format. |
| |`dumpTracedMessagesAsXml(nodeId, boolean)` |`String` |To dump the debugged messages from the give node id in XML format, optionally including the exchange properties. |
| |`enableBreakpoint(nodeId)` |`void` |To activate a breakpoint which has been disabled. |
| |`enableDebugger` |`void` |To enable the debugger |
| |`evaluateExpressionAtBreakpoint(nodeId, language, expression)` | `String`|To evaluate an expression in any supported language (e.g. Simple, CSimple, etc.) and convert the result to String |
| |`evaluateExpressionAtBreakpoint(nodeId, language, expression, resultType)` | `Object`|To evaluate an expression in any supported language (e.g. Simple, CSimple, etc.) and return the result as a given result type |
| |`getBreakpoints` |`Set<String>` |To get a set of all the nodes which has a breakpoint added. |
| |`getDebuggerCounter` |`long` |Gets the total number of debugged messages. |
| |`getSuspendedBreakpointNodeIds` |`Set<String>` |To get a set of all the nodes which has suspended breakpoints (eg an Exchange at the breakpoint which is suspended). |
| |`removeBreakpoint(nodeId)` |`void` |To remove the breakpoint from the given node id. |
| |`resetDebuggerCounter` |`void` |To reset the debugger counter. |
| |`resumeAll` |`void` |To resume all suspended breakpoints. |
| |`resumeBreakpoint(nodeId)` |`void` |To resume a suspend breakpoint, which will then continue routing the Exchange. |
| |`setExchangePropertyOnBreakpoint(nodeId,exchangePropertyName,value)` |`void` |To update/add the Exchange property on the suspended Exchange at the node. |
| |`setFallbackTimeout(value)` |`long` |Fallback Timeout in seconds (300 seconds as default) when block the message processing in Camel. A timeout used for waiting for a message to arrive at a given breakpoint. ` |
| |`setMessageBodyOnBreakpoint(nodeId,body)` |`void` |To update the message body on the suspended Exchange at the node. |
| |`setMessageHeaderOnBreakpoint(nodeId,headerName,value)` |`void` |To update/add the message header on the suspended Exchange at the node. |
| |`stepBreakpoint(nodeId)` |`void` |To start single step mode from a suspended breakpoint at the given node. Then invoke `step` to step to next node in the route. |
| |`step` |`void` |To step into the next node when in single step mode. |
| |`stepOver` |`void` |To step over the next node when in single step mode. |
| |`skipOver` |`void` |To skip over the next node when in single step mode. |
| |`validateConditionalBreakpoint` |`String` |Used for validating if a given predicate is valid or not. Returns null if valid, otherwise a string with the error message. |
| |`messageHistoryOnBreakpointAsXml(nodeId)` |`String` |Returns message history at the given node Id in XML format |
| |======================================================================= |
| |
| == Enabling |
| |
| You would need to enable backlogger debugger using the JMX API. |
| |
| == See Also |
| |
| See xref:debugger.adoc[Debugger] |