Skip to content

Missing Http2ClientConfiguration prevents service startup #818

@jdeex

Description

@jdeex

Expected Behavior

Service should start and retrieve the configuration from Consul

Actual Behaviour

From Micronaut update 4.10.4 Consul client fails to retrieve configuracion from Consul Agent since there is some configuration missing (that was not required in previous versions: 4.10.3 or older)

It is also happening in current latest 4.10.8

See the stack trace below:
2026-02-11T18:34:20,326+01:00 INFO 19 --- [main] i.m.c.DefaultBeanContext : Reading bootstrap environment configuration 2026-02-11T18:34:21,777+01:00 ERROR 19 --- [main] i.m.r.Micronaut : Error starting Micronaut server: Error reading distributed configuration from Consul: Connect Error: Cannot invoke "io.micronaut.http.client.HttpClientConfiguration$Http2ClientConfiguration.getMaxHeaderListSize()" because the return value of "io.micronaut.http.client.HttpClientConfiguration.getHttp2Configuration()" is null io.micronaut.context.exceptions.ConfigurationException: Error reading distributed configuration from Consul: Connect Error: Cannot invoke "io.micronaut.http.client.HttpClientConfiguration$Http2ClientConfiguration.getMaxHeaderListSize()" because the return value of "io.micronaut.http.client.HttpClientConfiguration.getHttp2Configuration()" is null at io.micronaut.discovery.consul.config.ConsulConfigurationClient.lambda$getPropertySources$3(ConsulConfigurationClient.java:151) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onError(Operators.java:2235) at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:846) at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:612) at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:592) at reactor.core.publisher.FluxFlatMap$FlatMapMain.innerError(FluxFlatMap.java:867) at reactor.core.publisher.FluxFlatMap$FlatMapInner.onError(FluxFlatMap.java:994) at reactor.core.publisher.FluxMap$MapSubscriber.onError(FluxMap.java:134) at reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93) at reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93) at io.micronaut.core.async.propagation.ReactivePropagation$2.onError(ReactivePropagation.java:129) at io.micronaut.http.reactive.execution.FlowAsMono$SubscriptionImpl.forward(FlowAsMono.java:132) at io.micronaut.http.reactive.execution.FlowAsMono$SubscriptionImpl.lambda$request$0(FlowAsMono.java:119) at io.micronaut.core.execution.ImperativeExecutionFlowImpl.onComplete(ImperativeExecutionFlowImpl.java:132) at io.micronaut.core.execution.DelayedExecutionFlowImpl$OnComplete.apply(DelayedExecutionFlowImpl.java:410) at io.micronaut.core.execution.DelayedExecutionFlowImpl.work(DelayedExecutionFlowImpl.java:58) at io.micronaut.core.execution.DelayedExecutionFlowImpl.completeLazy(DelayedExecutionFlowImpl.java:80) at io.micronaut.core.execution.DelayedExecutionFlowImpl.completeExceptionally(DelayedExecutionFlowImpl.java:104) at io.micronaut.core.execution.ExecutionFlow.lambda$timeout$2(ExecutionFlow.java:199) at io.micronaut.http.reactive.execution.ReactorExecutionFlowImpl$2.onError(ReactorExecutionFlowImpl.java:266) at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:241) at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:315) at io.micronaut.http.reactive.execution.FlowAsMono$SubscriptionImpl.forward(FlowAsMono.java:132) at io.micronaut.http.reactive.execution.FlowAsMono$SubscriptionImpl.lambda$request$0(FlowAsMono.java:119) at io.micronaut.core.execution.ImperativeExecutionFlowImpl.onComplete(ImperativeExecutionFlowImpl.java:132) at io.micronaut.core.execution.DelayedExecutionFlowImpl$OnComplete.apply(DelayedExecutionFlowImpl.java:410) at io.micronaut.core.execution.DelayedExecutionFlowImpl.work(DelayedExecutionFlowImpl.java:58) at io.micronaut.core.execution.DelayedExecutionFlowImpl.completeLazy(DelayedExecutionFlowImpl.java:80) at io.micronaut.core.execution.DelayedExecutionFlowImpl.completeExceptionally(DelayedExecutionFlowImpl.java:104) at io.micronaut.http.client.netty.Pool49$PendingRequest.tryCompleteExceptionally(Pool49.java:1124) at io.micronaut.http.client.netty.Pool49$LocalPoolPair.onNewConnectionFailure(Pool49.java:519) at io.micronaut.http.client.netty.Pool49.onNewConnectionFailure(Pool49.java:136) at io.micronaut.http.client.netty.ConnectionManager$PoolHolder$1.onNewConnectionFailure(ConnectionManager.java:1219) at io.micronaut.http.client.netty.InitialConnectionErrorHandler.channelInactive(InitialConnectionErrorHandler.java:50) at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:250) at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:427) at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:392) at io.netty.handler.ssl.SslHandler.channelInactive(SslHandler.java:1208) at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:250) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1424) at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:876) at io.netty.channel.AbstractChannel$AbstractUnsafe$8.run(AbstractChannel.java:684) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:148) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:141) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:535) at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:201) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Unknown Source) Suppressed: java.lang.Exception: #block terminated with an error at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:104) at reactor.core.publisher.Mono.block(Mono.java:1779) at io.micronaut.discovery.client.config.DistributedPropertySourceLocator.findPropertySources(DistributedPropertySourceLocator.java:79) at io.micronaut.context.DefaultApplicationContext$RuntimeConfiguredEnvironment.readPropertySourceList(DefaultApplicationContext.java:993) at io.micronaut.context.env.DefaultEnvironment.readPropertySources(DefaultEnvironment.java:442) at io.micronaut.context.env.DefaultEnvironment.start(DefaultEnvironment.java:280) at io.micronaut.context.DefaultApplicationContext$RuntimeConfiguredEnvironment.start(DefaultApplicationContext.java:979) at io.micronaut.context.DefaultApplicationContext$RuntimeConfiguredEnvironment.start(DefaultApplicationContext.java:947) at io.micronaut.context.DefaultApplicationContext.startEnvironment(DefaultApplicationContext.java:295) at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:224) at io.micronaut.runtime.Micronaut.start(Micronaut.java:75) at io.micronaut.runtime.Micronaut.run(Micronaut.java:347) at io.micronaut.runtime.Micronaut.run(Micronaut.java:333) at com.demo.Application.main(Application.java:8)

Steps To Reproduce

Update micronaut to any version above 4.10.3
Include micronaut-discovery-client dependency (will be newer than 4.7.1)
Configure Consul

Environment Information

No response

Example Application

No response

Version

4.10.4

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions