The MicroProfile test fails if message history is turned off #650
diff --git a/extensions/microprofile-metrics/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsProcessor.java b/extensions/microprofile-metrics/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsProcessor.java
index 9f137c3..4c26c42 100644
--- a/extensions/microprofile-metrics/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsProcessor.java
+++ b/extensions/microprofile-metrics/deployment/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/deployment/MicroProfileMetricsProcessor.java
@@ -25,6 +25,7 @@
 import org.apache.camel.quarkus.component.microprofile.metrics.runtime.CamelMicroProfileMetricsRecorder;
 import org.apache.camel.quarkus.core.deployment.CamelBeanBuildItem;
 import org.apache.camel.quarkus.core.deployment.CamelContextBuildItem;
+import org.apache.camel.quarkus.core.deployment.CamelMainListenerBuildItem;
 import org.eclipse.microprofile.metrics.MetricRegistry;
 
 class MicroProfileMetricsProcessor {
@@ -47,6 +48,15 @@
 
     @Record(ExecutionTime.STATIC_INIT)
     @BuildStep
+    CamelMainListenerBuildItem contextConfigurerListener(
+            CamelMicroProfileMetricsRecorder recorder,
+            CamelMicroProfileMetricsConfig config) {
+
+        return new CamelMainListenerBuildItem(recorder.createContextConfigurerListener(config));
+    }
+
+    @Record(ExecutionTime.STATIC_INIT)
+    @BuildStep
     public void configureCamelContext(CamelMicroProfileMetricsRecorder recorder, CamelMicroProfileMetricsConfig config,
             CamelContextBuildItem camelContextBuildItem) {
         recorder.configureCamelContext(config, camelContextBuildItem.getCamelContext());
diff --git a/extensions/microprofile-metrics/runtime/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/runtime/CamelMicroProfileMetricsRecorder.java b/extensions/microprofile-metrics/runtime/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/runtime/CamelMicroProfileMetricsRecorder.java
index bfe8ba0..e0a2c75 100644
--- a/extensions/microprofile-metrics/runtime/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/runtime/CamelMicroProfileMetricsRecorder.java
+++ b/extensions/microprofile-metrics/runtime/src/main/java/org/apache/camel/quarkus/component/microprofile/metrics/runtime/CamelMicroProfileMetricsRecorder.java
@@ -25,8 +25,11 @@
 import org.apache.camel.component.microprofile.metrics.event.notifier.route.MicroProfileMetricsRouteEventNotifier;
 import org.apache.camel.component.microprofile.metrics.message.history.MicroProfileMetricsMessageHistoryFactory;
 import org.apache.camel.component.microprofile.metrics.route.policy.MicroProfileMetricsRoutePolicyFactory;
+import org.apache.camel.main.MainListener;
+import org.apache.camel.main.MainListenerSupport;
 import org.apache.camel.spi.ManagementStrategy;
 import org.eclipse.microprofile.metrics.MetricRegistry;
+import org.jboss.logging.Logger;
 
 @Recorder
 public class CamelMicroProfileMetricsRecorder {
@@ -35,6 +38,10 @@
         return new RuntimeValue<>(MetricRegistries.get(MetricRegistry.Type.APPLICATION));
     }
 
+    public RuntimeValue<MainListener> createContextConfigurerListener(CamelMicroProfileMetricsConfig config) {
+        return new RuntimeValue<>(new MicroProfileMetricsContextConfigurerListener(config));
+    }
+
     public void configureCamelContext(CamelMicroProfileMetricsConfig config,
             RuntimeValue<CamelContext> camelContextRuntimeValue) {
         CamelContext camelContext = camelContextRuntimeValue.getValue();
@@ -44,11 +51,6 @@
             camelContext.addRoutePolicyFactory(new MicroProfileMetricsRoutePolicyFactory());
         }
 
-        if (config.enableMessageHistory) {
-            camelContext.setMessageHistory(true);
-            camelContext.setMessageHistoryFactory(new MicroProfileMetricsMessageHistoryFactory());
-        }
-
         if (config.enableExchangeEventNotifier) {
             managementStrategy.addEventNotifier(new MicroProfileMetricsExchangeEventNotifier());
         }
@@ -61,4 +63,29 @@
             managementStrategy.addEventNotifier(new MicroProfileMetricsCamelContextEventNotifier());
         }
     }
+
+    private static class MicroProfileMetricsContextConfigurerListener extends MainListenerSupport {
+        private static final Logger LOGGER = Logger.getLogger(MicroProfileMetricsContextConfigurerListener.class);
+        private final CamelMicroProfileMetricsConfig config;
+
+        public MicroProfileMetricsContextConfigurerListener(CamelMicroProfileMetricsConfig config) {
+            this.config = config;
+        }
+
+        @Override
+        public void configure(CamelContext camelContext) {
+            if (!config.enableMessageHistory) {
+                return;
+            }
+
+            if (!camelContext.isMessageHistory()) {
+                LOGGER.warn(
+                        "MessageHistory is not use and will be enabled as required by MicroProfile Metrics for MessageHistory");
+
+                camelContext.setMessageHistory(true);
+            }
+
+            camelContext.setMessageHistoryFactory(new MicroProfileMetricsMessageHistoryFactory());
+        }
+    }
 }
diff --git a/integration-tests/microprofile/src/main/resources/application.properties b/integration-tests/microprofile/src/main/resources/application.properties
index 99ae16b..4381bd3 100644
--- a/integration-tests/microprofile/src/main/resources/application.properties
+++ b/integration-tests/microprofile/src/main/resources/application.properties
@@ -24,4 +24,9 @@
 #
 # Camel
 #
-camel.context.name = quarkus-camel-example
\ No newline at end of file
+camel.context.name = quarkus-camel-example
+
+# Uncomment to turn on/off the message history
+# Note that on camel 3.1.x is off by default but is on by default on previous releases.
+#
+# camel.context.message-history = false
\ No newline at end of file