You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/02/09 07:52:53 UTC

[camel] branch camel-3.20.x updated (2af5f2c7a31 -> 35ff1f7f949)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a change to branch camel-3.20.x
in repository https://gitbox.apache.org/repos/asf/camel.git


    from 2af5f2c7a31 CAMEL-19018: Fix camel-vertx-http potential duplication of HTTP header values
     new 79111b46434 CAMEL-19026: camel-main - Add camel.main.backlogTracingStandby option.
     new dbbd6510a47 CAMEL-19026: Add queue size mbean attribute for backlog tracer
     new 35ff1f7f949 CAMEL-19026: camel-main - Add camel.main.backlogTracingStandby option.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../main/java/org/apache/camel/CamelContext.java   | 12 ++++++++
 .../apache/camel/impl/debugger/BacklogTracer.java  | 27 ++++++++++++++++-
 .../camel/impl/engine/AbstractCamelContext.java    | 19 ++++++++++++
 .../apache/camel/impl/engine/DefaultChannel.java   |  4 ++-
 .../camel/impl/ExtendedCamelContextConfigurer.java |  6 ++++
 .../camel/impl/lw/LightweightCamelContext.java     | 10 +++++++
 .../impl/lw/LightweightRuntimeCamelContext.java    | 10 +++++++
 .../MainConfigurationPropertiesConfigurer.java     |  6 ++++
 .../camel-main-configuration-metadata.json         |  1 +
 core/camel-main/src/main/docs/main.adoc            |  1 +
 .../camel/main/DefaultConfigurationConfigurer.java |  1 +
 .../camel/main/DefaultConfigurationProperties.java | 26 ++++++++++++++++
 .../mbean/ManagedBacklogTracerMBean.java           |  6 ++++
 .../management/mbean/ManagedBacklogTracer.java     | 10 +++++++
 .../camel/management/BacklogTracerFilterTest.java  |  2 +-
 .../management/BacklogTracerIdOnAllNodesTest.java  |  2 +-
 .../management/BacklogTracerPatternRouteTest.java  |  2 +-
 .../camel/management/BacklogTracerPatternTest.java |  2 +-
 .../management/BacklogTracerStreamCachingTest.java |  2 +-
 .../apache/camel/management/BacklogTracerTest.java | 35 +++++-----------------
 20 files changed, 149 insertions(+), 35 deletions(-)


[camel] 02/03: CAMEL-19026: Add queue size mbean attribute for backlog tracer

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-3.20.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit dbbd6510a47a756dd26e9ef1c690658e30c1423e
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Feb 9 07:53:13 2023 +0100

    CAMEL-19026: Add queue size mbean attribute for backlog tracer
---
 .../src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java  | 4 ++++
 .../apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java | 3 +++
 .../java/org/apache/camel/management/mbean/ManagedBacklogTracer.java | 5 +++++
 3 files changed, 12 insertions(+)

diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
index ffcc9dad4f2..b0e90350726 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
@@ -253,6 +253,10 @@ public final class BacklogTracer extends ServiceSupport {
         return traceCounter.get();
     }
 
+    public long getQueueSize() {
+        return queue.size();
+    }
+
     public void resetTraceCounter() {
         traceCounter.set(0);
     }
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java
index 09df86129f2..11aadc2306c 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java
@@ -68,6 +68,9 @@ public interface ManagedBacklogTracerMBean {
     @ManagedOperation(description = "Resets the trace counter")
     void resetTraceCounter();
 
+    @ManagedAttribute(description = "Number of traced messages in the backlog")
+    long getQueueSize();
+
     @ManagedAttribute(description = "Number of maximum chars in the message body in the trace message. Use zero or negative value to have unlimited size.")
     int getBodyMaxChars();
 
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
index 8172b4d44a3..b3310e51094 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
@@ -126,6 +126,11 @@ public class ManagedBacklogTracer implements ManagedBacklogTracerMBean {
         backlogTracer.resetTraceCounter();
     }
 
+    @Override
+    public long getQueueSize() {
+        return backlogTracer.getQueueSize();
+    }
+
     @Override
     public int getBodyMaxChars() {
         return backlogTracer.getBodyMaxChars();


[camel] 03/03: CAMEL-19026: camel-main - Add camel.main.backlogTracingStandby option.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-3.20.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 35ff1f7f94932854312ddd95b3879dfb2c6552f4
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Feb 9 08:36:29 2023 +0100

    CAMEL-19026: camel-main - Add camel.main.backlogTracingStandby option.
---
 .../camel/management/BacklogTracerFilterTest.java  |  2 +-
 .../management/BacklogTracerIdOnAllNodesTest.java  |  2 +-
 .../management/BacklogTracerPatternRouteTest.java  |  2 +-
 .../camel/management/BacklogTracerPatternTest.java |  2 +-
 .../management/BacklogTracerStreamCachingTest.java |  2 +-
 .../apache/camel/management/BacklogTracerTest.java | 35 +++++-----------------
 6 files changed, 12 insertions(+), 33 deletions(-)

diff --git a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerFilterTest.java b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerFilterTest.java
index 3ac467aa074..e45e6e7e782 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerFilterTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerFilterTest.java
@@ -109,7 +109,7 @@ public class BacklogTracerFilterTest extends ManagementTestSupport {
             @Override
             public void configure() throws Exception {
                 context.setUseBreadcrumb(false);
-                context.setBacklogTracing(true);
+                context.setBacklogTracingStandby(true);
 
                 from("direct:start")
                         .to("mock:foo").id("foo")
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java
index eb86ab60810..28ca05cf89a 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerIdOnAllNodesTest.java
@@ -137,7 +137,7 @@ public class BacklogTracerIdOnAllNodesTest extends ManagementTestSupport {
             @Override
             public void configure() throws Exception {
                 context.setUseBreadcrumb(false);
-                context.setBacklogTracing(true);
+                context.setBacklogTracingStandby(true);
 
                 from("direct:start")
                         .choice()
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternRouteTest.java b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternRouteTest.java
index b559a0d573b..c77caa44f9e 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternRouteTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternRouteTest.java
@@ -88,7 +88,7 @@ public class BacklogTracerPatternRouteTest extends ManagementTestSupport {
             @Override
             public void configure() throws Exception {
                 context.setUseBreadcrumb(false);
-                context.setBacklogTracing(true);
+                context.setBacklogTracingStandby(true);
 
                 from("direct:start").routeId("coolRoute")
                         .to("direct:beer")
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java
index 9f194f8e74d..920c3065f6e 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerPatternTest.java
@@ -100,7 +100,7 @@ public class BacklogTracerPatternTest extends ManagementTestSupport {
             @Override
             public void configure() throws Exception {
                 context.setUseBreadcrumb(false);
-                context.setBacklogTracing(true);
+                context.setBacklogTracingStandby(true);
 
                 from("direct:start")
                         .to("mock:foo").id("foo")
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerStreamCachingTest.java b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerStreamCachingTest.java
index fb7cd9406d5..41502002a0f 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerStreamCachingTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerStreamCachingTest.java
@@ -89,7 +89,7 @@ public class BacklogTracerStreamCachingTest extends ManagementTestSupport {
             @Override
             public void configure() throws Exception {
                 context.setUseBreadcrumb(false);
-                context.setBacklogTracing(true);
+                context.setBacklogTracingStandby(true);
 
                 from("direct:start").streamCaching()
                         .process(exchange -> {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerTest.java b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerTest.java
index a0bbf1e31ea..d2ef42331a6 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/BacklogTracerTest.java
@@ -49,7 +49,7 @@ public class BacklogTracerTest extends ManagementTestSupport {
         assertTrue(mbeanServer.isRegistered(on));
 
         Boolean enabled = (Boolean) mbeanServer.getAttribute(on, "Enabled");
-        assertEquals(Boolean.FALSE, enabled, "Should not be enabled");
+        assertEquals(Boolean.TRUE, enabled, "Should be enabled");
 
         Integer size = (Integer) mbeanServer.getAttribute(on, "BacklogSize");
         assertEquals(1000, size.intValue(), "Should be 1000");
@@ -57,9 +57,6 @@ public class BacklogTracerTest extends ManagementTestSupport {
         Boolean removeOnDump = (Boolean) mbeanServer.getAttribute(on, "RemoveOnDump");
         assertEquals(Boolean.TRUE, removeOnDump);
 
-        // enable it
-        mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
-
         getMockEndpoint("mock:foo").expectedMessageCount(2);
         getMockEndpoint("mock:bar").expectedMessageCount(2);
 
@@ -100,14 +97,11 @@ public class BacklogTracerTest extends ManagementTestSupport {
         mbeanServer.isRegistered(on);
 
         Boolean enabled = (Boolean) mbeanServer.getAttribute(on, "Enabled");
-        assertEquals(Boolean.FALSE, enabled, "Should not be enabled");
+        assertEquals(Boolean.TRUE, enabled, "Should be enabled");
 
         Integer size = (Integer) mbeanServer.getAttribute(on, "BacklogSize");
         assertEquals(1000, size.intValue(), "Should be 1000");
 
-        // enable it
-        mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
-
         getMockEndpoint("mock:foo").expectedMessageCount(2);
         getMockEndpoint("mock:bar").expectedMessageCount(2);
 
@@ -140,10 +134,7 @@ public class BacklogTracerTest extends ManagementTestSupport {
         mbeanServer.isRegistered(on);
 
         Boolean enabled = (Boolean) mbeanServer.getAttribute(on, "Enabled");
-        assertEquals(Boolean.FALSE, enabled, "Should not be enabled");
-
-        // enable it
-        mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
+        assertEquals(Boolean.TRUE, enabled, "Should be enabled");
 
         getMockEndpoint("mock:foo").expectedMessageCount(2);
         getMockEndpoint("mock:bar").expectedMessageCount(2);
@@ -220,10 +211,7 @@ public class BacklogTracerTest extends ManagementTestSupport {
         mbeanServer.isRegistered(on);
 
         Boolean enabled = (Boolean) mbeanServer.getAttribute(on, "Enabled");
-        assertEquals(Boolean.FALSE, enabled, "Should not be enabled");
-
-        // enable it
-        mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
+        assertEquals(Boolean.TRUE, enabled, "Should not be enabled");
 
         getMockEndpoint("mock:foo").expectedMessageCount(2);
         getMockEndpoint("mock:bar").expectedMessageCount(2);
@@ -261,10 +249,7 @@ public class BacklogTracerTest extends ManagementTestSupport {
         mbeanServer.setAttribute(on, new Attribute("RemoveOnDump", Boolean.FALSE));
 
         Boolean enabled = (Boolean) mbeanServer.getAttribute(on, "Enabled");
-        assertEquals(Boolean.FALSE, enabled, "Should not be enabled");
-
-        // enable it
-        mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
+        assertEquals(Boolean.TRUE, enabled, "Should not be enabled");
 
         getMockEndpoint("mock:foo").expectedMessageCount(2);
         getMockEndpoint("mock:bar").expectedMessageCount(2);
@@ -316,10 +301,7 @@ public class BacklogTracerTest extends ManagementTestSupport {
         mbeanServer.setAttribute(on, new Attribute("RemoveOnDump", Boolean.FALSE));
 
         Boolean enabled = (Boolean) mbeanServer.getAttribute(on, "Enabled");
-        assertEquals(Boolean.FALSE, enabled, "Should not be enabled");
-
-        // enable it
-        mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
+        assertEquals(Boolean.TRUE, enabled, "Should be enabled");
 
         getMockEndpoint("mock:foo").expectedMessageCount(2);
         getMockEndpoint("mock:bar").expectedMessageCount(2);
@@ -385,10 +367,7 @@ public class BacklogTracerTest extends ManagementTestSupport {
         mbeanServer.setAttribute(on, new Attribute("TracePattern", "foo"));
 
         Boolean enabled = (Boolean) mbeanServer.getAttribute(on, "Enabled");
-        assertEquals(Boolean.FALSE, enabled, "Should not be enabled");
-
-        // enable it
-        mbeanServer.setAttribute(on, new Attribute("Enabled", Boolean.TRUE));
+        assertEquals(Boolean.TRUE, enabled, "Should not be enabled");
 
         getMockEndpoint("mock:foo").expectedMessageCount(10);
         getMockEndpoint("mock:bar").expectedMessageCount(10);


[camel] 01/03: CAMEL-19026: camel-main - Add camel.main.backlogTracingStandby option.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-3.20.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 79111b46434b1c7ad1b1d92ecd34b1478a40cf22
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Feb 9 07:48:02 2023 +0100

    CAMEL-19026: camel-main - Add camel.main.backlogTracingStandby option.
---
 .../main/java/org/apache/camel/CamelContext.java   | 12 ++++++++++
 .../apache/camel/impl/debugger/BacklogTracer.java  | 23 ++++++++++++++++++-
 .../camel/impl/engine/AbstractCamelContext.java    | 19 ++++++++++++++++
 .../apache/camel/impl/engine/DefaultChannel.java   |  4 +++-
 .../camel/impl/ExtendedCamelContextConfigurer.java |  6 +++++
 .../camel/impl/lw/LightweightCamelContext.java     | 10 +++++++++
 .../impl/lw/LightweightRuntimeCamelContext.java    | 10 +++++++++
 .../MainConfigurationPropertiesConfigurer.java     |  6 +++++
 .../camel-main-configuration-metadata.json         |  1 +
 core/camel-main/src/main/docs/main.adoc            |  1 +
 .../camel/main/DefaultConfigurationConfigurer.java |  1 +
 .../camel/main/DefaultConfigurationProperties.java | 26 ++++++++++++++++++++++
 .../mbean/ManagedBacklogTracerMBean.java           |  3 +++
 .../management/mbean/ManagedBacklogTracer.java     |  5 +++++
 14 files changed, 125 insertions(+), 2 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
index 90aff10ee92..bfe62772a47 100644
--- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
@@ -1215,6 +1215,18 @@ public interface CamelContext extends CamelContextLifecycle, RuntimeConfiguratio
      */
     boolean isTracingStandby();
 
+    /**
+     * Whether to set backlog tracing on standby. If on standby then the backlog tracer is installed and made available.
+     * Then the backlog tracer can be enabled later at runtime via JMX or via Java API.
+     */
+    void setBacklogTracingStandby(boolean backlogTracingStandby);
+
+    /**
+     * Whether to set backlog tracing on standby. If on standby then the backlog tracer is installed and made available.
+     * Then the backlog tracer can be enabled later at runtime via JMX or via Java API.
+     */
+    boolean isBacklogTracingStandby();
+
     /**
      * Gets the current {@link UuidGenerator}
      *
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
index c9bf71433de..ffcc9dad4f2 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
@@ -47,8 +47,9 @@ public final class BacklogTracer extends ServiceSupport {
     private final CamelContext camelContext;
     private final Language simple;
     private boolean enabled;
+    private boolean standby;
     private final AtomicLong traceCounter = new AtomicLong();
-    // use a queue with a upper limit to avoid storing too many messages
+    // use a queue with an upper limit to avoid storing too many messages
     private final Queue<BacklogTracerEventMessage> queue = new LinkedBlockingQueue<>(MAX_BACKLOG_SIZE);
     // how many of the last messages to keep in the backlog at total
     private int backlogSize = 1000;
@@ -149,6 +150,26 @@ public final class BacklogTracer extends ServiceSupport {
         this.enabled = enabled;
     }
 
+    /**
+     * Whether the tracer is standby.
+     *
+     * If a tracer is in standby then the tracer is activated during startup and are ready to be enabled manually via
+     * JMX or calling the enabled method.
+     */
+    public boolean isStandby() {
+        return standby;
+    }
+
+    /**
+     * Whether the tracer is standby.
+     *
+     * If a tracer is in standby then the tracer is activated during startup and are ready to be enabled manually via
+     * JMX or calling the enabled method.
+     */
+    public void setStandby(boolean standby) {
+        this.standby = standby;
+    }
+
     public int getBacklogSize() {
         return backlogSize;
     }
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 031302fa49a..a0d9501fb82 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -261,6 +261,7 @@ public abstract class AbstractCamelContext extends BaseService
     private Initialization initialization = Initialization.Default;
     private Boolean autoStartup = Boolean.TRUE;
     private Boolean backlogTrace = Boolean.FALSE;
+    private Boolean backlogTraceStandby = Boolean.FALSE;
     private Boolean trace = Boolean.FALSE;
     private Boolean traceStandby = Boolean.FALSE;
     private String tracePattern;
@@ -2325,6 +2326,14 @@ public abstract class AbstractCamelContext extends BaseService
         this.backlogTrace = backlogTrace;
     }
 
+    public Boolean getBacklogTraceStandby() {
+        return backlogTraceStandby;
+    }
+
+    public void setBacklogTraceStandby(Boolean backlogTraceStandby) {
+        this.backlogTraceStandby = backlogTraceStandby;
+    }
+
     @Override
     public void setDebugging(Boolean debug) {
         this.debug = debug;
@@ -4889,6 +4898,16 @@ public abstract class AbstractCamelContext extends BaseService
         return traceStandby != null && traceStandby;
     }
 
+    @Override
+    public void setBacklogTracingStandby(boolean backlogTracingStandby) {
+        this.backlogTraceStandby = backlogTracingStandby;
+    }
+
+    @Override
+    public boolean isBacklogTracingStandby() {
+        return backlogTraceStandby != null && backlogTraceStandby;
+    }
+
     @Override
     public UuidGenerator getUuidGenerator() {
         if (uuidGenerator == null) {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultChannel.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultChannel.java
index 6b5503177e7..b7298e274d0 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultChannel.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultChannel.java
@@ -193,7 +193,7 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel {
             }
         }
 
-        if (route.isBacklogTracing()) {
+        if (camelContext.isBacklogTracingStandby() || route.isBacklogTracing()) {
             // add jmx backlog tracer
             BacklogTracer backlogTracer = getOrCreateBacklogTracer(camelContext);
             addAdvice(new BacklogTracerAdvice(backlogTracer, targetOutputDef, routeDefinition, first));
@@ -280,6 +280,8 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel {
         }
         if (tracer == null) {
             tracer = BacklogTracer.createTracer(camelContext);
+            tracer.setEnabled(camelContext.isBacklogTracing() != null && camelContext.isBacklogTracing());
+            tracer.setStandby(camelContext.isBacklogTracingStandby());
             camelContext.setExtension(BacklogTracer.class, tracer);
         }
         return tracer;
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 66046dfa7b7..19f5559c032 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -35,6 +35,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "AutowiredEnabled": target.setAutowiredEnabled(property(camelContext, java.lang.Boolean.class, value)); return true;
         case "backlogtracing":
         case "BacklogTracing": target.setBacklogTracing(property(camelContext, java.lang.Boolean.class, value)); return true;
+        case "backlogtracingstandby":
+        case "BacklogTracingStandby": target.setBacklogTracingStandby(property(camelContext, boolean.class, value)); return true;
         case "basepackagescan":
         case "BasePackageScan": target.setBasePackageScan(property(camelContext, java.lang.String.class, value)); return true;
         case "beanintrospection":
@@ -246,6 +248,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "AutowiredEnabled": return java.lang.Boolean.class;
         case "backlogtracing":
         case "BacklogTracing": return java.lang.Boolean.class;
+        case "backlogtracingstandby":
+        case "BacklogTracingStandby": return boolean.class;
         case "basepackagescan":
         case "BasePackageScan": return java.lang.String.class;
         case "beanintrospection":
@@ -458,6 +462,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "AutowiredEnabled": return target.isAutowiredEnabled();
         case "backlogtracing":
         case "BacklogTracing": return target.isBacklogTracing();
+        case "backlogtracingstandby":
+        case "BacklogTracingStandby": return target.isBacklogTracingStandby();
         case "basepackagescan":
         case "BasePackageScan": return target.getBasePackageScan();
         case "beanintrospection":
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
index 7fc6ace53ac..bf3776ab6e3 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
@@ -896,6 +896,16 @@ public class LightweightCamelContext implements ExtendedCamelContext, CatalogCam
         return delegate.isTracingStandby();
     }
 
+    @Override
+    public void setBacklogTracingStandby(boolean backlogTracingStandby) {
+        delegate.setBacklogTracingStandby(backlogTracingStandby);
+    }
+
+    @Override
+    public boolean isBacklogTracingStandby() {
+        return delegate.isBacklogTracingStandby();
+    }
+
     @Override
     public UuidGenerator getUuidGenerator() {
         return delegate.getUuidGenerator();
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
index 122a6237168..c8781b608c0 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
@@ -1179,6 +1179,16 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat
         return false;
     }
 
+    @Override
+    public void setBacklogTracingStandby(boolean backlogTracingStandby) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public boolean isBacklogTracingStandby() {
+        return false;
+    }
+
     //
     // ExtendedCamelContext
     //
diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
index f55f7da8e7c..c6e018dbc85 100644
--- a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
+++ b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java
@@ -39,6 +39,8 @@ public class MainConfigurationPropertiesConfigurer extends org.apache.camel.supp
         case "AutowiredEnabled": target.setAutowiredEnabled(property(camelContext, boolean.class, value)); return true;
         case "backlogtracing":
         case "BacklogTracing": target.setBacklogTracing(property(camelContext, boolean.class, value)); return true;
+        case "backlogtracingstandby":
+        case "BacklogTracingStandby": target.setBacklogTracingStandby(property(camelContext, boolean.class, value)); return true;
         case "basepackagescan":
         case "BasePackageScan": target.setBasePackageScan(property(camelContext, java.lang.String.class, value)); return true;
         case "basepackagescanenabled":
@@ -282,6 +284,8 @@ public class MainConfigurationPropertiesConfigurer extends org.apache.camel.supp
         case "AutowiredEnabled": return boolean.class;
         case "backlogtracing":
         case "BacklogTracing": return boolean.class;
+        case "backlogtracingstandby":
+        case "BacklogTracingStandby": return boolean.class;
         case "basepackagescan":
         case "BasePackageScan": return java.lang.String.class;
         case "basepackagescanenabled":
@@ -526,6 +530,8 @@ public class MainConfigurationPropertiesConfigurer extends org.apache.camel.supp
         case "AutowiredEnabled": return target.isAutowiredEnabled();
         case "backlogtracing":
         case "BacklogTracing": return target.isBacklogTracing();
+        case "backlogtracingstandby":
+        case "BacklogTracingStandby": return target.isBacklogTracingStandby();
         case "basepackagescan":
         case "BasePackageScan": return target.getBasePackageScan();
         case "basepackagescanenabled":
diff --git a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
index d2d09c2a980..76721b586ae 100644
--- a/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
+++ b/core/camel-main/src/generated/resources/META-INF/camel-main-configuration-metadata.json
@@ -21,6 +21,7 @@
     { "name": "camel.main.autoStartup", "description": "Sets whether the object should automatically start when Camel starts. Important: Currently only routes can be disabled, as CamelContext's are always started. Note: When setting auto startup false on CamelContext then that takes precedence and no routes are started. You would need to start CamelContext explicit using the org.apache.camel.CamelContext.start() method, to start the context, and then you would need to start the routes ma [...]
     { "name": "camel.main.autowiredEnabled", "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. Default is true.", "sourceType": "org.apache.camel.main.DefaultConfiguration [...]
     { "name": "camel.main.backlogTracing", "description": "Sets whether backlog tracing is enabled or not. Default is false.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": "false" },
+    { "name": "camel.main.backlogTracingStandby", "description": "Whether to set backlog tracing on standby. If on standby then the backlog tracer is installed and made available. Then the backlog tracer can be enabled later at runtime via JMX or via Java API. Default is false.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": "false" },
     { "name": "camel.main.basePackageScan", "description": "Package name to use as base (offset) for classpath scanning of RouteBuilder , and org.apache.camel.TypeConverter classes. If you are using Spring Boot then it is instead recommended to use Spring Boots component scanning and annotate your route builder classes with Component. In other words only use this for Camel Main in standalone mode.", "sourceType": "org.apache.camel.main.MainConfigurationProperties", "type": "string", "jav [...]
     { "name": "camel.main.basePackageScanEnabled", "description": "Whether base package scan is enabled.", "sourceType": "org.apache.camel.main.MainConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": true },
     { "name": "camel.main.beanIntrospectionExtendedStatistics", "description": "Sets whether bean introspection uses extended statistics. The default is false.", "sourceType": "org.apache.camel.main.DefaultConfigurationProperties", "type": "boolean", "javaType": "boolean", "defaultValue": "false" },
diff --git a/core/camel-main/src/main/docs/main.adoc b/core/camel-main/src/main/docs/main.adoc
index d441f5b8a35..dd41b0badd9 100644
--- a/core/camel-main/src/main/docs/main.adoc
+++ b/core/camel-main/src/main/docs/main.adoc
@@ -32,6 +32,7 @@ The camel.main supports 118 options, which are listed below.
 | *camel.main.autoStartup* | Sets whether the object should automatically start when Camel starts. Important: Currently only routes can be disabled, as CamelContext's are always started. Note: When setting auto startup false on CamelContext then that takes precedence and no routes are started. You would need to start CamelContext explicit using the org.apache.camel.CamelContext.start() method, to start the context, and then you would need to start the routes manually using CamelContext.g [...]
 | *camel.main.autowiredEnabled* | Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. Default is true. | true | boolean
 | *camel.main.backlogTracing* | Sets whether backlog tracing is enabled or not. Default is false. | false | boolean
+| *camel.main.backlogTracing{zwsp}Standby* | Whether to set backlog tracing on standby. If on standby then the backlog tracer is installed and made available. Then the backlog tracer can be enabled later at runtime via JMX or via Java API. Default is false. | false | boolean
 | *camel.main.basePackageScan* | Package name to use as base (offset) for classpath scanning of RouteBuilder , and org.apache.camel.TypeConverter classes. If you are using Spring Boot then it is instead recommended to use Spring Boots component scanning and annotate your route builder classes with Component. In other words only use this for Camel Main in standalone mode. |  | String
 | *camel.main.basePackageScan{zwsp}Enabled* | Whether base package scan is enabled. | true | boolean
 | *camel.main.beanIntrospection{zwsp}ExtendedStatistics* | Sets whether bean introspection uses extended statistics. The default is false. | false | boolean
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
index 7b6c84d9b18..3f53dfa2ed3 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
@@ -299,6 +299,7 @@ public final class DefaultConfigurationConfigurer {
         }
 
         camelContext.setBacklogTracing(config.isBacklogTracing());
+        camelContext.setBacklogTracingStandby(config.isBacklogTracingStandby());
         camelContext.setTracing(config.isTracing());
         camelContext.setTracingStandby(config.isTracingStandby());
         camelContext.setTracingPattern(config.getTracingPattern());
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java
index 429a219cbec..cc1132b6264 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationProperties.java
@@ -71,6 +71,7 @@ public abstract class DefaultConfigurationProperties<T> {
     private boolean streamCachingStatisticsEnabled;
     private boolean debugging;
     private boolean backlogTracing;
+    private boolean backlogTracingStandby;
     private boolean typeConverterStatisticsEnabled;
     private boolean tracing;
     private boolean tracingStandby;
@@ -675,6 +676,20 @@ public abstract class DefaultConfigurationProperties<T> {
         this.backlogTracing = backlogTracing;
     }
 
+    public boolean isBacklogTracingStandby() {
+        return backlogTracingStandby;
+    }
+
+    /**
+     * Whether to set backlog tracing on standby. If on standby then the backlog tracer is installed and made available.
+     * Then the backlog tracer can be enabled later at runtime via JMX or via Java API.
+     *
+     * Default is false.
+     */
+    public void setBacklogTracingStandby(boolean backlogTracingStandby) {
+        this.backlogTracingStandby = backlogTracingStandby;
+    }
+
     public boolean isMessageHistory() {
         return messageHistory;
     }
@@ -1946,6 +1961,17 @@ public abstract class DefaultConfigurationProperties<T> {
         return (T) this;
     }
 
+    /**
+     * Whether to set backlog tracing on standby. If on standby then the backlog tracer is installed and made available.
+     * Then the backlog tracer can be enabled later at runtime via JMX or via Java API.
+     *
+     * Default is false.
+     */
+    public T withBacklogTracingStandby(boolean backlogTracingStandby) {
+        this.backlogTracingStandby = backlogTracingStandby;
+        return (T) this;
+    }
+
     /**
      * Sets whether message history is enabled or not.
      *
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java
index a81049af784..09df86129f2 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedBacklogTracerMBean.java
@@ -29,6 +29,9 @@ public interface ManagedBacklogTracerMBean {
     @ManagedAttribute(description = "Camel ManagementName")
     String getCamelManagementName();
 
+    @ManagedAttribute(description = "Is tracing standby")
+    boolean isStandby();
+
     @ManagedAttribute(description = "Is tracing enabled")
     boolean isEnabled();
 
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
index 1eb09defe64..8172b4d44a3 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
@@ -61,6 +61,11 @@ public class ManagedBacklogTracer implements ManagedBacklogTracerMBean {
         return camelContext.getManagementName();
     }
 
+    @Override
+    public boolean isStandby() {
+        return backlogTracer.isStandby();
+    }
+
     @Override
     public void setEnabled(boolean enabled) {
         backlogTracer.setEnabled(enabled);