Fernando Matias Balieiro created CAMEL-23719:
------------------------------------------------
Summary: [camel-micrometer] When ProducerTemplate sends to a SEDA
endpoint, Exchange.getFromRouteId() returns null
Key: CAMEL-23719
URL: https://issues.apache.org/jira/browse/CAMEL-23719
Project: Camel
Issue Type: Bug
Components: camel-micrometer
Affects Versions: 4.20.0
Reporter: Fernando Matias Balieiro
h3. Current Scenario
When a project is configured to use *quarkus-micrometer-registry-prometheus*
and a message is sent to a *SEDA* endpoint through {*}ProducerTemplate{*}, the
following warning appears in the logs:
{code:java}
2026-06-08 14:32:45,577 WARN [org.apache.camel.support.EventHelper] (Camel
(camel-6) thread #21 - seda://producer) Error notifying event
C99DFEF70A95789-0000000000000001 exchange completed took: 3ms. This exception
will be ignored.: java.lang.IllegalArgumentException: Prometheus requires that
all meters with the same name have the same set of tag keys. There is already
an existing meter named 'camel_exchange_event_notifier_seconds' containing tag
keys [camelContext, endpointName, eventType, failed, kind]. The meter you are
attempting to register has keys [camelContext, endpointName, eventType, failed,
kind, routeId].
at
io.micrometer.prometheus.PrometheusMeterRegistry.lambda$throwExceptionOnRegistrationFailure$19(PrometheusMeterRegistry.java:619)
at
io.micrometer.core.instrument.MeterRegistry.meterRegistrationFailed(MeterRegistry.java:1291)
at
io.micrometer.prometheus.PrometheusMeterRegistry.lambda$applyToCollector$18(PrometheusMeterRegistry.java:593)
at
java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1956)
at
io.micrometer.prometheus.PrometheusMeterRegistry.applyToCollector(PrometheusMeterRegistry.java:579)
at
io.micrometer.prometheus.PrometheusMeterRegistry.newTimer(PrometheusMeterRegistry.java:328)
at
io.micrometer.core.instrument.MeterRegistry.lambda$timer$6(MeterRegistry.java:379)
at
io.micrometer.core.instrument.MeterRegistry.getOrCreateMeter(MeterRegistry.java:725)
at
io.micrometer.core.instrument.MeterRegistry.registerMeterIfNecessary(MeterRegistry.java:652)
at io.micrometer.core.instrument.MeterRegistry.timer(MeterRegistry.java:377)
at io.micrometer.core.instrument.Timer$Builder.register(Timer.java:471)
at io.micrometer.core.instrument.Timer$Builder.register(Timer.java:465)
at
io.micrometer.core.instrument.composite.CompositeTimer.registerNewMeter(CompositeTimer.java:205)
at
io.micrometer.core.instrument.composite.CompositeTimer.registerNewMeter(CompositeTimer.java:35)
at
io.micrometer.core.instrument.composite.AbstractCompositeMeter.add(AbstractCompositeMeter.java:67)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at java.base/java.util.Collections$SetFromMap.forEach(Collections.java:6060)
at
io.micrometer.core.instrument.composite.CompositeMeterRegistry.lambda$new$0(CompositeMeterRegistry.java:67)
at
io.micrometer.core.instrument.composite.CompositeMeterRegistry.lock(CompositeMeterRegistry.java:189)
at
io.micrometer.core.instrument.composite.CompositeMeterRegistry.lambda$new$1(CompositeMeterRegistry.java:67)
at
io.micrometer.core.instrument.MeterRegistry.getOrCreateMeter(MeterRegistry.java:735)
at
io.micrometer.core.instrument.MeterRegistry.registerMeterIfNecessary(MeterRegistry.java:652)
at io.micrometer.core.instrument.MeterRegistry.timer(MeterRegistry.java:377)
at io.micrometer.core.instrument.MeterRegistry.timer(MeterRegistry.java:534)
at
org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifier.handleDoneEvent(MicrometerExchangeEventNotifier.java:204)
at
org.apache.camel.component.micrometer.eventnotifier.MicrometerExchangeEventNotifier.notify(MicrometerExchangeEventNotifier.java:179)
at org.apache.camel.support.EventHelper.doNotifyEvent(EventHelper.java:1575)
at org.apache.camel.support.EventHelper.notifyExchangeDone(EventHelper.java:783)
at
org.apache.camel.impl.engine.DefaultUnitOfWork.done(DefaultUnitOfWork.java:280)
at org.apache.camel.support.UnitOfWorkHelper.doneUow(UnitOfWorkHelper.java:53)
at
org.apache.camel.impl.engine.CamelInternalProcessor$UnitOfWorkProcessorAdvice.after(CamelInternalProcessor.java:1178)
at
org.apache.camel.impl.engine.CamelInternalProcessor$UnitOfWorkProcessorAdvice.after(CamelInternalProcessor.java:1115)
at
org.apache.camel.impl.engine.AdviceIterator.runAfterTask(AdviceIterator.java:45)
at
org.apache.camel.impl.engine.AdviceIterator.runAfterTasks(AdviceIterator.java:39)
at
org.apache.camel.impl.engine.CamelInternalProcessor$AsyncAfterTask.done(CamelInternalProcessor.java:263)
at org.apache.camel.AsyncCallback.run(AsyncCallback.java:44)
at
org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:202)
at
org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:192)
at
org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:169)
at
org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:143)
at
org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:162)
at
org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:385)
at
org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:361)
at
org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:351)
at
org.apache.camel.component.seda.SedaConsumer.processPolledExchange(SedaConsumer.java:267)
at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:210)
at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:146)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at java.base/java.lang.Thread.run(Thread.java:1474)
{code}
The issue seems to be caused by recent changes in the Micrometer framework, as
reported in the Quarkus 3.35 Release Notes:
[https://github.com/quarkusio/quarkus/wiki/Migration-Guide-3.35#micrometer-prometheus-registry]
h3. Expected Scenario
The event should be properly registered or ignored and no warning message
should be visible in the logs.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)