[ 
https://issues.apache.org/jira/browse/CAMEL-23719?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18087586#comment-18087586
 ] 

Pasquale Congiusti commented on CAMEL-23719:
--------------------------------------------

I've also commented in the PR. We should check where the meter is registered 
and skip it if there is already any with the same name. See this PR: 
https://github.com/apache/camel/pull/17526

> [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
>            Priority: Minor
>
> 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)

Reply via email to