Configuration via env variables not working correctly anymore since Quarkus 3.11
Closed this issue · 4 comments
After upgrading from Quarkus 3.10.2 to 3.11.0 our application that uses channels with a hyphen, e.g. abc-def
, cannot be configured using environment variables anymore.
Description
When configuring a channel with a hyphen in the name in application.properties, e.g.
mp.messaging.incoming.abc-def.enabled=false
mp.messaging.incoming.abc-def.connector=smallrye-in-memory
and enabling the channel using the environment variable MP_MESSAGING_INCOMING_ABC_DEF_ENABLED=true
,
then the application throws the following exception on startup:
java.lang.RuntimeException: Failed to start quarkus
at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
at io.quarkus.runtime.Application.start(Application.java:101)
at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:111)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:71)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:44)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:124)
at io.quarkus.runner.GeneratedMain.main(Unknown Source)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at io.quarkus.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:113)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: jakarta.enterprise.inject.spi.DeploymentException: java.lang.IllegalArgumentException: SRMSG00071: Invalid channel configuration - the `connector` attribute must be set for channel `abc`
at io.quarkus.smallrye.reactivemessaging.runtime.SmallRyeReactiveMessagingLifecycle.onApplicationStart(SmallRyeReactiveMessagingLifecycle.java:58)
at io.quarkus.smallrye.reactivemessaging.runtime.SmallRyeReactiveMessagingLifecycle_Observer_onApplicationStart_qTrMuLFyQ1IvGfeSxRVitl6CCBQ.notify(Unknown Source)
at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:351)
at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:333)
at io.quarkus.arc.impl.EventImpl.fire(EventImpl.java:80)
at io.quarkus.arc.runtime.ArcRecorder.fireLifecycleEvent(ArcRecorder.java:155)
at io.quarkus.arc.runtime.ArcRecorder.handleLifecycleEvents(ArcRecorder.java:106)
at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent1144526294.deploy_0(Unknown Source)
at io.quarkus.deployment.steps.LifecycleEventsBuildStep$startupEvent1144526294.deploy(Unknown Source)
... 11 more
Caused by: java.lang.IllegalArgumentException: SRMSG00071: Invalid channel configuration - the `connector` attribute must be set for channel `abc`
at io.smallrye.reactive.messaging.providers.impl.ConnectorConfig.lambda$getConnectorAttribute$0(ConnectorConfig.java:65)
at java.base/java.util.Optional.orElseThrow(Optional.java:403)
at io.smallrye.reactive.messaging.providers.impl.ConnectorConfig.lambda$getConnectorAttribute$1(ConnectorConfig.java:65)
at java.base/java.util.Optional.orElseGet(Optional.java:364)
at io.smallrye.reactive.messaging.providers.impl.ConnectorConfig.getConnectorAttribute(ConnectorConfig.java:64)
at io.smallrye.reactive.messaging.providers.impl.ConnectorConfig.<init>(ConnectorConfig.java:59)
at io.smallrye.reactive.messaging.providers.impl.ConfiguredChannelFactory.lambda$extractConfigurationFor$0(ConfiguredChannelFactory.java:91)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at io.smallrye.reactive.messaging.providers.impl.ConfiguredChannelFactory.extractConfigurationFor(ConfiguredChannelFactory.java:78)
at io.smallrye.reactive.messaging.providers.impl.ConfiguredChannelFactory.initialize(ConfiguredChannelFactory.java:107)
at io.smallrye.reactive.messaging.providers.impl.ConfiguredChannelFactory_ClientProxy.initialize(Unknown Source)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939)
at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
at io.smallrye.reactive.messaging.providers.extension.MediatorManager.start(MediatorManager.java:250)
at io.smallrye.reactive.messaging.providers.extension.MediatorManager_ClientProxy.start(Unknown Source)
at io.quarkus.smallrye.reactivemessaging.runtime.SmallRyeReactiveMessagingLifecycle.onApplicationStart(SmallRyeReactiveMessagingLifecycle.java:53)
... 19 more
The problem seems to be that smallrye-reactive-messaging thinks the name of the channel is abc
instead of abc-def
when using the environment variable MP_MESSAGING_INCOMING_ABC_DEF_ENABLED
.
This setup used to work up to Quarkus 3.10.2, but does not work anymore since Quarkus 3.11.0.
Steps to reproduce the issue
I created a minimal Quarkus project that reproduces the issue: panphg/smallrye-messaging-config.
- Clone the repository panphg/smallrye-messaging-config
- Run
./gradlew quarkusDev
If you change value of quarkusPluginVersion
and quarkusPlatformVersion
in gradle.properties
to 3.10.2
and run the application again, everything works as expected.
I'm not sure if this issue is caused by smallrye-reactive-messaging or smallrye-config (or a combination of both), but I'm happy to raise this issue in smallrye-config again, if you think the problem should be solved there.
Hi, thanks for the detailed description.
In reactive messaging we've tests against regressions on this.
Also both Quarkus 3.10.2 and 3.11. depend on Reactive messaging 4.21.0
We'd need to check what has changed on Quarkus.
Should I open the issue in smallrye-config? Quarkus 3.11 is using a different version (3.7.1 vs 3.8.1) and I found a change in 3.8.0 that might have something to do with this problem: smallrye/smallrye-config#1146.
I think there could be something with the Quarkus integration, let's see what @radcortez finds out in quarkusio/quarkus#41296
Closing this as @radcortez came up with a fix in smallrye/smallrye-config#1180