micronaut-projects / micronaut-discovery-client

Micronaut's Discovery Client
Apache License 2.0
22 stars 21 forks source link

Microanut service registration for consul and eureka does not startup, will not fully register the service #517

Closed krickert closed 1 year ago

krickert commented 1 year ago

Expected Behavior

Run the tutorial and demonstrage how sonsul would work.

Actual Behaviour

The application fails with the following stack trace: /Users/kristianrickert/.sdkman/candidates/java/17.0.5-amzn/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=62002:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/kristianrickert/Downloads/micronaut-microservices-services-discover-consul-gradle-kotlin (1)/bookrecommendation/build/classes/kotlin/main:/Users/kristianrickert/Downloads/micronaut-microservices-services-discover-consul-gradle-kotlin (1)/bookrecommendation/build/generated/ksp/main/classes:/Users/kristianrickert/Downloads/micronaut-microservices-services-discover-consul-gradle-kotlin (1)/bookrecommendation/build/resources/main:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut.discovery/micronaut-discovery-client/4.0.1/93edd521ca27ce769f590abc22eac7389df6ad65/micronaut-discovery-client-4.0.1.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut.kotlin/micronaut-kotlin-runtime/4.0.2/a85061b54a2a7908dbf3a7991af58e7e7846704a/micronaut-kotlin-runtime-4.0.2.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut.reactor/micronaut-reactor-http-client/3.0.2/81d44de5e8cc0bedf6f4b4872022eff4b3505ca0/micronaut-reactor-http-client-3.0.2.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut.reactor/micronaut-reactor/3.0.2/209dc7dc4710e241c048a8bafaaf6b0003b99b40/micronaut-reactor-3.0.2.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut.serde/micronaut-serde-jackson/2.2.4/2c037ddb72942d01cd742424a35ab6699a33c1ff/micronaut-serde-jackson-2.2.4.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-http-client/4.1.6/991f4f20ccfc135bd369f3a4d1873f7f1dfbec1d/micronaut-http-client-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-retry/4.1.6/3347c66e64e7070eade33dcade17a64806152aae/micronaut-retry-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-management/4.1.6/ab0d444971a5967cface2fa969a56d1f17a7ba67/micronaut-management-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-http-server-netty/4.1.6/88b4c225560685e668133e3d67caf35877f5ed6b/micronaut-http-server-netty-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-inject/4.1.6/51ead8f85c5abfeaa4e9234f1bf7cc5ffcafdee6/micronaut-inject-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.graalvm.nativeimage/svm/23.0.1/3a8dc6ab2a0a01b6a5a0cf02941492d6a5a9beea/svm-23.0.1.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.8.22/b52be44bc57cb6fd2169a29aefa4507c4e49c858/kotlin-reflect-1.8.22.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.8.22/b25c86d47d6b962b9cf0f8c3f320c8a10eea3dd1/kotlin-stdlib-jdk8-1.8.22.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-discovery-core/4.1.6/4f6c414c5a110b9a90cafa4670ee7d22668d243c/micronaut-discovery-core-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-json-core/4.1.6/899071d64f2f2696f6ad465751e3d98c46c4d922/micronaut-json-core-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut.validation/micronaut-validation/4.0.3/2792c9474f65b5d5ff775d4d804bde7dd3ad1699/micronaut-validation-4.0.3.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-context/4.1.6/b52f30d46cec46c176d9dac3020f62372b82e6ab/micronaut-context-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.projectreactor/reactor-core/3.5.10/b2d043508fbc0190bfb63eea1b33551f48a8c32b/reactor-core-3.5.10.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut.serde/micronaut-serde-api/2.2.4/b0de3fa4823a97e91f3c385400b4e6c21ce6edfa/micronaut-serde-api-2.2.4.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-jackson-core/4.1.6/e0450ffc50b1533645d29658a46cd5e186ff925a/micronaut-jackson-core-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.15.2/4724a65ac8e8d156a24898d50fd5dbd3642870b8/jackson-annotations-2.15.2.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-websocket/4.1.6/22eac813b6d57125ac5301f19c7b75c8d80b32cf/micronaut-websocket-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-http-client-core/4.1.6/e47a5eab2eb6a9ef5ae8bbe9fe66bcfbd3c619b6/micronaut-http-client-core-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-http-netty/4.1.6/c6c287095312541c62bf03a3665eca6628b700da/micronaut-http-netty-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.netty/netty-handler-proxy/4.1.97.Final/a99ecef0e1d86a92e40a7c89805c236d9cd7493e/netty-handler-proxy-4.1.97.Final.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/2.0.9/7cf2726fdcfbc8610f9a71fb3ed639871f315340/slf4j-api-2.0.9.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-core-reactive/4.1.6/856b4ef83a273b39ba2b4a39657eca7e73ab6fe9/micronaut-core-reactive-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-router/4.1.6/eeaf11ff4caaea6a2ae24ebe733f1440d885fd2d/micronaut-router-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-http-server/4.1.6/eabe112b07c2c0174279359da1ba80e4109406d7/micronaut-http-server-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.netty/netty-codec-http/4.1.97.Final/af78acec783ffd77c63d8aeecc21041fd39ac54f/netty-codec-http-4.1.97.Final.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-core/4.1.6/7165916b17e00ea684ec960d38598828702e81ea/micronaut-core-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/jakarta.annotation/jakarta.annotation-api/2.1.1/48b9bda22b091b1f48b13af03fe36db3be6e1ae3/jakarta.annotation-api-2.1.1.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/jakarta.inject/jakarta.inject-api/2.0.1/4c28afe1991a941d7702fe1362c365f0a8641d1e/jakarta.inject-api-2.0.1.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.graalvm.nativeimage/objectfile/23.0.1/fdf2498dec4e3a9c245194459489326139542ebb/objectfile-23.0.1.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.graalvm.nativeimage/pointsto/23.0.1/4c00015096d190329bed2afb6d944e3325d3c5e8/pointsto-23.0.1.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.graalvm.nativeimage/native-image-base/23.0.1/5e6f202d15d266fad0fb80691608578dfb36b97d/native-image-base-23.0.1.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.graalvm.compiler/compiler/23.0.1/d46d27452f8565a54f753208b16d4e0809180a98/compiler-23.0.1.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.graalvm.sdk/graal-sdk/23.0.1/a9e13a0f6d6dea76f2dfdedc7f10325e4f0481c4/graal-sdk-23.0.1.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.8.22/636bf8b320e7627482771bbac9ed7246773c02bd/kotlin-stdlib-1.8.22.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.8.22/4dabb8248310d833bb6a8b516024a91fd3d275c/kotlin-stdlib-jdk7-1.8.22.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-http/4.1.6/45f92cb2a7806464e5788583fb20950fd26c1593/micronaut-http-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/jakarta.validation/jakarta.validation-api/3.0.2/92b6631659ba35ca09e44874d3eb936edfeee532/jakarta.validation-api-3.0.2.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-aop/4.1.6/8e06948b197df724bfec6661dec2d657df169c4b/micronaut-aop-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.reactivestreams/reactive-streams/1.0.4/3864a1320d97d7b045f729a326e1e077661f31b7/reactive-streams-1.0.4.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.15.2/a6fe1836469a69b3ff66037c324d75fc66ef137c/jackson-core-2.15.2.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-buffer-netty/4.1.6/57429cf821a1f39ed1f1e0efb99f5ec0ab267d17/micronaut-buffer-netty-4.1.6.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.netty/netty-codec-http2/4.1.97.Final/893888d09a7bef0d0ba973d7471943e765d0fd08/netty-codec-http2-4.1.97.Final.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.netty/netty-handler/4.1.97.Final/abb86c6906bf512bf2b797a41cd7d2e8d3cd7c36/netty-handler-4.1.97.Final.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.netty/netty-codec-socks/4.1.97.Final/30e8fa29a349db5a933225d61891b8802836bb79/netty-codec-socks-4.1.97.Final.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.netty/netty-codec/4.1.97.Final/384ba4d75670befbedb45c4d3b497a93639c206d/netty-codec-4.1.97.Final.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport/4.1.97.Final/f37380d23c9bb079bc702910833b2fd532c9abd0/netty-transport-4.1.97.Final.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.netty/netty-buffer/4.1.97.Final/f8f3d8644afa5e6e1a40a3a6aeb9d9aa970ecb4f/netty-buffer-4.1.97.Final.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.netty/netty-common/4.1.97.Final/7cceacaf11df8dc63f23d0fb58e9d4640fc88404/netty-common-4.1.97.Final.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.graalvm.truffle/truffle-api/23.0.1/7a374e07d336784c1ec94e8fed45a61a700c0993/truffle-api-23.0.1.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.8.22/1a8e3601703ae14bb58757ea6b2d8e8e5935a586/kotlin-stdlib-common-1.8.22.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.netty/netty-transport-native-unix-common/4.1.97.Final/d469d84265ab70095b01b40886cabdd433b6e664/netty-transport-native-unix-common-4.1.97.Final.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.netty/netty-resolver/4.1.97.Final/cec8348108dc76c47cf87c669d514be52c922144/netty-resolver-4.1.97.Final.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.module/jackson-module-kotlin/2.15.2/475c9721f5a2a5b7bea57d504bd8b0586d1ba5e/jackson-module-kotlin-2.15.2.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.4.11/54450c0c783e896a1a6d88c043bd2f1daba1c382/logback-classic-1.4.11.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/org.yaml/snakeyaml/2.0/3aab2116756442bf0d4cd1c089b24d34c3baa253/snakeyaml-2.0.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/com.typesafe/config/1.4.2/4c40a633e7994cfb0354244efb6d03fcb11c3ecf/config-1.4.2.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut.serde/micronaut-serde-support/2.2.4/80a9170538d1097bfc376e9ba994b3b435625cba/micronaut-serde-support-2.2.4.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.15.2/9353b021f10c307c00328f52090de2bdb4b6ff9c/jackson-databind-2.15.2.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-core/1.4.11/2f9f280219a9922a74200eaf7138c4c17fb87c0f/logback-core-1.4.11.jar:/Users/kristianrickert/.gradle/caches/modules-2/files-2.1/io.micronaut/micronaut-context-propagation/4.1.6/ba078112b19834cbe716321a79d2039e01c89b1b/micronaut-context-propagation-4.1.6.jar example.micronaut.ApplicationKt


| \/ (_) | | | |\/| | |/ | '/ | ' \ / ` | | | | | | | | | | (| | | () | | | | (| | || | | || |||_|_| _/|| ||_,|_,|\| 20:18:52.607 [main] INFO i.m.c.DefaultApplicationContext$RuntimeConfiguredEnvironment - Established active environments: [dev] 20:18:52.609 [main] INFO i.m.c.DefaultApplicationContext$BootstrapEnvironment - Established active environments: [dev] 20:18:52.618 [main] INFO i.m.context.DefaultBeanContext - Reading bootstrap environment configuration 20:18:53.126 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 730ms. Server Running: http://localhost:8080 20:19:03.140 [default-nioEventLoopGroup-1-2] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. io.netty.handler.timeout.ReadTimeoutException: null 20:19:09.167 [default-nioEventLoopGroup-1-3] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. io.netty.handler.timeout.ReadTimeoutException: null 20:19:18.178 [default-nioEventLoopGroup-1-4] WARN i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. io.netty.handler.timeout.ReadTimeoutException: null 20:19:20.195 [default-nioEventLoopGroup-1-5] ERROR i.m.d.registration.AutoRegistration - Error occurred during service registration with Consul: Error encoding object [io.micronaut.discovery.consul.client.v1.NewServiceEntry@9a176cd9] to JSON: No serializable introspection present for type Inet4Address. Consider adding Serdeable. Serializable annotate to type Inet4Address. Alternatively if you are not in control of the project's source code, you can use @SerdeImport(Inet4Address.class) to enable serialization of this type. io.micronaut.http.codec.CodecException: Error encoding object [io.micronaut.discovery.consul.client.v1.NewServiceEntry@9a176cd9] to JSON: No serializable introspection present for type Inet4Address. Consider adding Serdeable. Serializable annotate to type Inet4Address. Alternatively if you are not in control of the project's source code, you can use @SerdeImport(Inet4Address.class) to enable serialization of this type. at io.micronaut.json.body.JsonMessageHandler.decorateWrite(JsonMessageHandler.java:127) at io.micronaut.json.body.JsonMessageHandler.writeTo(JsonMessageHandler.java:136) at io.micronaut.http.body.MessageBodyWriter.writeTo(MessageBodyWriter.java:138) at io.micronaut.http.netty.body.NettyJsonHandler.writeTo(NettyJsonHandler.java:133) at io.micronaut.http.body.DynamicMessageBodyWriter.writeTo(DynamicMessageBodyWriter.java:79) at io.micronaut.http.client.netty.DefaultHttpClient.buildNettyRequest(DefaultHttpClient.java:1326) at io.micronaut.http.client.netty.DefaultHttpClient.sendRequestThroughChannel(DefaultHttpClient.java:1468) at io.micronaut.http.client.netty.DefaultHttpClient.lambda$exchangeImpl$26(DefaultHttpClient.java:1102) at reactor.core.publisher.FluxCreate.subscribe(FluxCreate.java:95) at reactor.core.publisher.Flux.subscribe(Flux.java:8773) at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:195) at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) at io.micronaut.http.client.netty.CancellableMonoSink.tryForward(CancellableMonoSink.java:69) at io.micronaut.http.client.netty.CancellableMonoSink.tryEmitValue(CancellableMonoSink.java:86) at io.micronaut.http.client.netty.ConnectionManager$Pool$ConnectionHolder.emitPoolHandle(ConnectionManager.java:1155) at io.micronaut.http.client.netty.ConnectionManager$Pool$Http1ConnectionHolder.dispatch0(ConnectionManager.java:1308) at io.micronaut.http.client.netty.ConnectionManager$Pool$ConnectionHolder.dispatch(ConnectionManager.java:1179) at io.micronaut.http.client.netty.PoolResizer.dispatchSafe(PoolResizer.java:169) at io.micronaut.http.client.netty.PoolResizer.doSomeWork(PoolResizer.java:115) at io.micronaut.http.client.netty.PoolResizer.dirty(PoolResizer.java:77) at io.micronaut.http.client.netty.PoolResizer.onNewConnectionEstablished1(PoolResizer.java:208) at io.micronaut.http.client.netty.ConnectionManager$Pool$Http1ConnectionHolder.init(ConnectionManager.java:1248) at io.micronaut.http.client.netty.ConnectionManager$Pool$2$1.channelActive(ConnectionManager.java:1038) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:262) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238) at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:231) at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelActive(CombinedChannelDuplexHandler.java:412) at io.netty.channel.ChannelInboundHandlerAdapter.channelActive(ChannelInboundHandlerAdapter.java:69) at io.netty.channel.CombinedChannelDuplexHandler.channelActive(CombinedChannelDuplexHandler.java:211) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:260) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238) at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:231) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelActive(DefaultChannelPipeline.java:1398) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:258) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238) at io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:895) at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:305) at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:335) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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(Thread.java:833) Caused by: io.micronaut.serde.exceptions.SerdeException: No serializable introspection present for type Inet4Address. Consider adding Serdeable. Serializable annotate to type Inet4Address. Alternatively if you are not in control of the project's source code, you can use @SerdeImport(Inet4Address.class) to enable serialization of this type. at io.micronaut.serde.support.serializers.ObjectSerializer$4.tryToFindSerializer(ObjectSerializer.java:218) at io.micronaut.serde.support.serializers.ObjectSerializer$RuntimeTypeSerializer.lambda$getSerializer$0(ObjectSerializer.java:280) at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) at io.micronaut.serde.support.serializers.ObjectSerializer$RuntimeTypeSerializer.getSerializer(ObjectSerializer.java:278) at io.micronaut.serde.support.serializers.ObjectSerializer$RuntimeTypeSerializer.serialize(ObjectSerializer.java:245) at io.micronaut.serde.support.serializers.ObjectSerializer$RuntimeTypeSerializer.serialize(ObjectSerializer.java:245) at io.micronaut.serde.support.serializers.OptionalSerializer$1.serialize(OptionalSerializer.java:63) at io.micronaut.serde.support.serializers.OptionalSerializer$1.serialize(OptionalSerializer.java:51) at io.micronaut.serde.support.serializers.CustomizedObjectSerializer.serialize(CustomizedObjectSerializer.java:132) at io.micronaut.serde.support.serializers.ObjectSerializer$RuntimeTypeSerializer.serialize(ObjectSerializer.java:245) at io.micronaut.serde.jackson.JacksonJsonMapper.writeValue(JacksonJsonMapper.java:114) at io.micronaut.serde.jackson.JacksonJsonMapper.writeValue(JacksonJsonMapper.java:193) at io.micronaut.json.body.JsonMessageHandler.writeTo(JsonMessageHandler.java:134) ... 45 common frames omitted Caused by: io.micronaut.core.beans.exceptions.IntrospectionException: No serializable introspection present for type Inet4Address. Consider adding Serdeable. Serializable annotate to type Inet4Address. Alternatively if you are not in control of the project's source code, you can use @SerdeImport(Inet4Address.class) to enable serialization of this type. at io.micronaut.serde.support.DefaultSerdeIntrospections.getSerializableIntrospection(DefaultSerdeIntrospections.java:102) at io.micronaut.serde.support.serializers.SerBean.(SerBean.java:107) at io.micronaut.serde.support.serializers.ObjectSerializer.create(ObjectSerializer.java:202) at io.micronaut.serde.support.serializers.ObjectSerializer.lambda$getSerBean$0(ObjectSerializer.java:193) at io.micronaut.core.util.SupplierUtil$2.get(SupplierUtil.java:79) at io.micronaut.serde.support.serializers.ObjectSerializer.getSerBean(ObjectSerializer.java:194) at io.micronaut.serde.support.serializers.ObjectSerializer.createSpecificInternal(ObjectSerializer.java:93) at io.micronaut.serde.support.serializers.ObjectSerializer.createSpecific(ObjectSerializer.java:86) at io.micronaut.serde.support.serializers.ObjectSerializer$RuntimeTypeSerializer.tryToFindSerializer(ObjectSerializer.java:296) at io.micronaut.serde.support.serializers.ObjectSerializer$4.tryToFindSerializer(ObjectSerializer.java:216) at io.micronaut.serde.support.serializers.ObjectSerializer$RuntimeTypeSerializer.lambda$getSerializer$0(ObjectSerializer.java:280) at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) at io.micronaut.serde.support.serializers.ObjectSerializer$RuntimeTypeSerializer.getSerializer(ObjectSerializer.java:278) at io.micronaut.serde.support.serializers.ObjectSerializer$RuntimeTypeSerializer.isEmpty(ObjectSerializer.java:256) at io.micronaut.serde.support.serializers.OptionalSerializer$1.isEmpty(OptionalSerializer.java:77) at io.micronaut.serde.support.serializers.OptionalSerializer$1.isEmpty(OptionalSerializer.java:51) at io.micronaut.serde.support.serializers.CustomizedObjectSerializer.serialize(CustomizedObjectSerializer.java:100) ... 49 common frames omitted 20:20:03.761 [parallel-4] ERROR i.m.m.health.indicator.HealthResult - Health indicator [compositeDiscoveryClient(consul)] reported exception: io.micronaut.http.client.exceptions.ReadTimeoutException: Read Timeout io.micronaut.http.client.exceptions.ReadTimeoutException: Read Timeout at io.micronaut.http.client.exceptions.ReadTimeoutException.(ReadTimeoutException.java:26) at io.micronaut.http.client.netty.DefaultHttpClient.lambda$exchangeImpl$28(DefaultHttpClient.java:1135) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:295) at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:280) at reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:419) at reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162) at reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:271) at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:286) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) 20:20:31.239 [default-nioEventLoopGroup-1-5] ERROR i.m.d.registration.AutoRegistration - Error occurred de-registering service [bookrecommendation] with Consul: Read Timeout io.micronaut.http.client.exceptions.ReadTimeoutException: Read Timeout at io.micronaut.http.client.exceptions.ReadTimeoutException.(ReadTimeoutException.java:26) at io.micronaut.http.client.netty.DefaultHttpClient.lambda$exchangeImpl$28(DefaultHttpClient.java:1135) at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94) at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124) at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:295) at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:280) at reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:419) at reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162) at reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:271) at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:286) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) 20:20:31.367 [default-nioEventLoopGroup-1-23] ERROR i.m.h.client.netty.DefaultHttpClient - Failed to connect to remote java.lang.IllegalStateException: executor not accepting a task at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:61) at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:208) at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:46) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:189) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:175) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:516) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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(Thread.java:833) 20:20:31.367 [default-nioEventLoopGroup-1-21] ERROR i.m.h.client.netty.DefaultHttpClient - Failed to connect to remote java.lang.IllegalStateException: executor not accepting a task at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:61) at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:208) at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:46) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:189) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:175) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:516) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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(Thread.java:833) 20:20:31.369 [default-nioEventLoopGroup-1-24] ERROR i.m.h.client.netty.DefaultHttpClient - Failed to connect to remote java.lang.IllegalStateException: executor not accepting a task at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:61) at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:208) at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:46) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:189) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:175) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:516) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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(Thread.java:833) 20:20:31.370 [default-nioEventLoopGroup-1-22] ERROR i.m.h.client.netty.DefaultHttpClient - Failed to connect to remote java.lang.IllegalStateException: executor not accepting a task at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:61) at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:208) at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:46) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:189) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:175) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:516) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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(Thread.java:833) 20:20:31.371 [default-nioEventLoopGroup-1-25] ERROR i.m.h.client.netty.DefaultHttpClient - Failed to connect to remote java.lang.IllegalStateException: executor not accepting a task at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:61) at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:208) at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:46) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:189) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:175) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:516) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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(Thread.java:833) 20:20:31.372 [default-nioEventLoopGroup-1-27] ERROR i.m.h.client.netty.DefaultHttpClient - Failed to connect to remote java.lang.IllegalStateException: executor not accepting a task at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:61) at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:208) at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:46) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:189) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:175) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:516) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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(Thread.java:833) 20:20:31.372 [default-nioEventLoopGroup-1-29] ERROR i.m.h.client.netty.DefaultHttpClient - Failed to connect to remote java.lang.IllegalStateException: executor not accepting a task at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:61) at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:208) at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:46) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:189) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:175) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:516) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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(Thread.java:833) 20:20:31.470 [default-nioEventLoopGroup-1-28] ERROR i.m.h.client.netty.DefaultHttpClient - Failed to connect to remote java.lang.IllegalStateException: executor not accepting a task at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:61) at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:208) at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:46) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:189) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:175) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:516) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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(Thread.java:833) 20:20:31.470 [default-nioEventLoopGroup-1-26] ERROR i.m.h.client.netty.DefaultHttpClient - Failed to connect to remote java.lang.IllegalStateException: executor not accepting a task at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:61) at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:208) at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:46) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:189) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:175) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:516) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 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(Thread.java:833) 20:20:34.326 [Thread-0] INFO io.micronaut.runtime.Micronaut - Embedded Application shutting down

Process finished with exit code 0

Steps To Reproduce

  1. Download and install consul server brew tap hashicorp/tap brew install hashicorp/tap/consul consul agent -dev
  2. Download and run the consol service discovery tutorial
  3. the micronaut client registry fails

Environment Information

JDK java --version openjdk 17.0.8 2023-07-18 LTS OpenJDK Runtime Environment Corretto-17.0.8.7.1 (build 17.0.8+7-LTS) OpenJDK 64-Bit Server VM Corretto-17.0.8.7.1 (build 17.0.8+7-LTS, mixed mode, sharing)

OSX - Sonoma 14

Micronaut consul tutorial

https://guides.micronaut.io/latest/micronaut-microservices-services-discover-consul-gradle-kotlin.html https://guides.micronaut.io/latest/micronaut-microservices-services-discover-consul-maven-java.html Both fail

I also have an app on github below that fails in the same manner. There are 2 standalone grpc servers on that code, both have the same failures

I also tried running consul as local docker deploy. Same result

Furthermore, I get a similar error when trying Eureka

Example Application

https://github.com/krickert/search_indexer

Version

mn -V: Micronaut Version: 4.1.3

krickert commented 1 year ago

I also want to point out that this seems to be the case for all client discovery on consul. I am able to run it OK on my side in dev mode. I'll be glad to show any other details. I'm going to try and run this on a windows machine right now and see if it's OS specific. however, given that it's a serde serialization error, I suspect there's a bug that broke the feature

graemerocher commented 1 year ago

can you try declare @SerdeImport(Inet4Address.class) on your Application class as the error says, just out of interest

krickert commented 1 year ago
/home/krickert/.sdkman/candidates/java/17.0.7-tem/bin/java -Dfile.encoding=UTF-8 -classpath /home/krickert/IdeaProjects/search_indexer/services/grpc-nlp-service/target/classes:/home/krickert/.m2/repository/io/micronaut/micronaut-discovery-core/4.1.8/micronaut-discovery-core-4.1.8.jar:/home/krickert/.m2/repository/org/slf4j/slf4j-api/2.0.9/slf4j-api-2.0.9.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-context/4.1.8/micronaut-context-4.1.8.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-aop/4.1.8/micronaut-aop-4.1.8.jar:/home/krickert/.m2/repository/io/projectreactor/reactor-core/3.5.10/reactor-core-3.5.10.jar:/home/krickert/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar:/home/krickert/.m2/repository/io/micronaut/cache/micronaut-cache-caffeine/4.0.2/micronaut-cache-caffeine-4.0.2.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-inject/4.1.8/micronaut-inject-4.1.8.jar:/home/krickert/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar:/home/krickert/.m2/repository/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-core/4.1.8/micronaut-core-4.1.8.jar:/home/krickert/.m2/repository/io/micronaut/cache/micronaut-cache-core/4.0.2/micronaut-cache-core-4.0.2.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-http/4.1.8/micronaut-http-4.1.8.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-context-propagation/4.1.8/micronaut-context-propagation-4.1.8.jar:/home/krickert/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.7/caffeine-3.1.7.jar:/home/krickert/.m2/repository/org/checkerframework/checker-qual/3.36.0/checker-qual-3.36.0.jar:/home/krickert/.m2/repository/io/micronaut/discovery/micronaut-discovery-client/4.0.1/micronaut-discovery-client-4.0.1.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-json-core/4.1.8/micronaut-json-core-4.1.8.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-http-client/4.1.8/micronaut-http-client-4.1.8.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-http-client-core/4.1.8/micronaut-http-client-core-4.1.8.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-websocket/4.1.8/micronaut-websocket-4.1.8.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-http-netty/4.1.8/micronaut-http-netty-4.1.8.jar:/home/krickert/.m2/repository/io/netty/netty-codec-http/4.1.99.Final/netty-codec-http-4.1.99.Final.jar:/home/krickert/.m2/repository/io/netty/netty-codec-http2/4.1.99.Final/netty-codec-http2-4.1.99.Final.jar:/home/krickert/.m2/repository/io/netty/netty-handler/4.1.99.Final/netty-handler-4.1.99.Final.jar:/home/krickert/.m2/repository/io/netty/netty-resolver/4.1.99.Final/netty-resolver-4.1.99.Final.jar:/home/krickert/.m2/repository/io/netty/netty-handler-proxy/4.1.99.Final/netty-handler-proxy-4.1.99.Final.jar:/home/krickert/.m2/repository/io/netty/netty-common/4.1.99.Final/netty-common-4.1.99.Final.jar:/home/krickert/.m2/repository/io/netty/netty-buffer/4.1.99.Final/netty-buffer-4.1.99.Final.jar:/home/krickert/.m2/repository/io/netty/netty-transport/4.1.99.Final/netty-transport-4.1.99.Final.jar:/home/krickert/.m2/repository/io/netty/netty-codec/4.1.99.Final/netty-codec-4.1.99.Final.jar:/home/krickert/.m2/repository/io/netty/netty-codec-socks/4.1.99.Final/netty-codec-socks-4.1.99.Final.jar:/home/krickert/.m2/repository/io/micronaut/validation/micronaut-validation/4.0.3/micronaut-validation-4.0.3.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-core-reactive/4.1.8/micronaut-core-reactive-4.1.8.jar:/home/krickert/.m2/repository/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2.jar:/home/krickert/.m2/repository/io/micronaut/reactor/micronaut-reactor/3.0.2/micronaut-reactor-3.0.2.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-retry/4.1.8/micronaut-retry-4.1.8.jar:/home/krickert/.m2/repository/io/micronaut/grpc/micronaut-grpc-runtime/4.0.1/micronaut-grpc-runtime-4.0.1.jar:/home/krickert/.m2/repository/io/micronaut/grpc/micronaut-grpc-client-runtime/4.0.1/micronaut-grpc-client-runtime-4.0.1.jar:/home/krickert/.m2/repository/io/micronaut/grpc/micronaut-grpc-annotation/4.0.1/micronaut-grpc-annotation-4.0.1.jar:/home/krickert/.m2/repository/io/micronaut/grpc/micronaut-grpc-opentracing/4.0.1/micronaut-grpc-opentracing-4.0.1.jar:/home/krickert/.m2/repository/io/grpc/grpc-netty/1.56.1/grpc-netty-1.56.1.jar:/home/krickert/.m2/repository/io/grpc/grpc-core/1.56.1/grpc-core-1.56.1.jar:/home/krickert/.m2/repository/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar:/home/krickert/.m2/repository/org/codehaus/mojo/animal-sniffer-annotations/1.23/animal-sniffer-annotations-1.23.jar:/home/krickert/.m2/repository/io/perfmark/perfmark-api/0.26.0/perfmark-api-0.26.0.jar:/home/krickert/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.99.Final/netty-transport-native-unix-common-4.1.99.Final.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-buffer-netty/4.1.8/micronaut-buffer-netty-4.1.8.jar:/home/krickert/.m2/repository/io/micronaut/grpc/micronaut-grpc-server-runtime/4.0.1/micronaut-grpc-server-runtime-4.0.1.jar:/home/krickert/.m2/repository/io/micronaut/grpc/micronaut-grpc-health/4.0.1/micronaut-grpc-health-4.0.1.jar:/home/krickert/.m2/repository/io/micronaut/serde/micronaut-serde-jackson/2.2.5/micronaut-serde-jackson-2.2.5.jar:/home/krickert/.m2/repository/io/micronaut/micronaut-jackson-core/4.1.8/micronaut-jackson-core-4.1.8.jar:/home/krickert/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.15.2/jackson-core-2.15.2.jar:/home/krickert/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.15.2/jackson-annotations-2.15.2.jar:/home/krickert/.m2/repository/io/micronaut/serde/micronaut-serde-api/2.2.5/micronaut-serde-api-2.2.5.jar:/home/krickert/.m2/repository/io/micronaut/serde/micronaut-serde-support/2.2.5/micronaut-serde-support-2.2.5.jar:/home/krickert/.m2/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar:/home/krickert/.m2/repository/ch/qos/logback/logback-classic/1.4.11/logback-classic-1.4.11.jar:/home/krickert/.m2/repository/ch/qos/logback/logback-core/1.4.11/logback-core-1.4.11.jar:/home/krickert/.m2/repository/org/yaml/snakeyaml/2.0/snakeyaml-2.0.jar:/home/krickert/.m2/repository/io/micronaut/testresources/micronaut-test-resources-client/2.0.0/micronaut-test-resources-client-2.0.0.jar:/home/krickert/.m2/repository/io/micronaut/testresources/micronaut-test-resources-core/2.0.0/micronaut-test-resources-core-2.0.0.jar:/home/krickert/.m2/repository/org/apache/opennlp/opennlp-tools/2.3.0/opennlp-tools-2.3.0.jar:/home/krickert/IdeaProjects/search_indexer/protobuf-projects/wikisearch-model/target/classes:/home/krickert/.m2/repository/commons-io/commons-io/2.13.0/commons-io-2.13.0.jar:/home/krickert/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar:/home/krickert/.m2/repository/io/grpc/grpc-stub/1.56.1/grpc-stub-1.56.1.jar:/home/krickert/.m2/repository/io/grpc/grpc-api/1.56.1/grpc-api-1.56.1.jar:/home/krickert/.m2/repository/io/grpc/grpc-context/1.56.1/grpc-context-1.56.1.jar:/home/krickert/.m2/repository/io/grpc/grpc-protobuf/1.56.1/grpc-protobuf-1.56.1.jar:/home/krickert/.m2/repository/com/google/api/grpc/proto-google-common-protos/2.17.0/proto-google-common-protos-2.17.0.jar:/home/krickert/.m2/repository/io/grpc/grpc-protobuf-lite/1.56.1/grpc-protobuf-lite-1.56.1.jar:/home/krickert/.m2/repository/com/google/protobuf/protobuf-java/3.23.4/protobuf-java-3.23.4.jar:/home/krickert/.m2/repository/org/testcontainers/consul/1.18.3/consul-1.18.3.jar:/home/krickert/.m2/repository/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar:/home/krickert/.m2/repository/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar:/home/krickert/.m2/repository/com/google/errorprone/error_prone_annotations/2.18.0/error_prone_annotations-2.18.0.jar:/home/krickert/.m2/repository/com/google/guava/guava/32.0.1-jre/guava-32.0.1-jre.jar:/home/krickert/.m2/repository/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar:/home/krickert/.m2/repository/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/home/krickert/.m2/repository/com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar com.krickert.search.service.nlp.Application
 __  __ _                                  _   
|  \/  (_) ___ _ __ ___  _ __   __ _ _   _| |_ 
| |\/| | |/ __| '__/ _ \| '_ \ / _` | | | | __|
| |  | | | (__| | | (_) | | | | (_| | |_| | |_ 
|_|  |_|_|\___|_|  \___/|_| |_|\__,_|\__,_|\__|
03:20:09.914 [main] INFO  i.m.context.DefaultBeanContext - Reading bootstrap environment configuration
03:20:12.093 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 2804ms. Server Running: http://localhost:50051
03:20:22.110 [default-nioEventLoopGroup-4-1] WARN  i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
io.netty.handler.timeout.ReadTimeoutException: null
03:20:28.148 [default-nioEventLoopGroup-4-2] WARN  i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
io.netty.handler.timeout.ReadTimeoutException: null
03:20:37.150 [default-nioEventLoopGroup-4-3] WARN  i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
io.netty.handler.timeout.ReadTimeoutException: null
03:20:39.149 [default-nioEventLoopGroup-4-4] ERROR i.m.d.registration.AutoRegistration - Error occurred during service registration with Consul: class io.micronaut.discovery.consul.client.v1.TTLCheck cannot be cast to class io.micronaut.discovery.consul.client.v1.HTTPCheck (io.micronaut.discovery.consul.client.v1.TTLCheck and io.micronaut.discovery.consul.client.v1.HTTPCheck are in unnamed module of loader 'app')
java.lang.ClassCastException: class io.micronaut.discovery.consul.client.v1.TTLCheck cannot be cast to class io.micronaut.discovery.consul.client.v1.HTTPCheck (io.micronaut.discovery.consul.client.v1.TTLCheck and io.micronaut.discovery.consul.client.v1.HTTPCheck are in unnamed module of loader 'app')
    at io.micronaut.discovery.consul.client.v1.$HTTPCheck$Introspection.dispatchOne(Unknown Source)
    at io.micronaut.inject.beans.AbstractInitializableBeanIntrospection$BeanPropertyImpl.getUnsafe(AbstractInitializableBeanIntrospection.java:856)
    at io.micronaut.serde.support.serializers.SerBean$PropSerProperty.get(SerBean.java:463)
    at io.micronaut.serde.support.serializers.CustomizedObjectSerializer.serialize(CustomizedObjectSerializer.java:66)
    at io.micronaut.serde.support.serializers.CustomizedIterableSerializer.serialize(CustomizedIterableSerializer.java:50)
    at io.micronaut.serde.support.serializers.CustomizedIterableSerializer.serialize(CustomizedIterableSerializer.java:32)
    at io.micronaut.serde.support.serializers.CustomizedObjectSerializer.serialize(CustomizedObjectSerializer.java:132)
    at io.micronaut.serde.support.serializers.ObjectSerializer$RuntimeTypeSerializer.serialize(ObjectSerializer.java:245)
    at io.micronaut.serde.jackson.JacksonJsonMapper.writeValue(JacksonJsonMapper.java:114)
    at io.micronaut.serde.jackson.JacksonJsonMapper.writeValue(JacksonJsonMapper.java:193)
    at io.micronaut.json.body.JsonMessageHandler.writeTo(JsonMessageHandler.java:134)
    at io.micronaut.http.body.MessageBodyWriter.writeTo(MessageBodyWriter.java:138)
    at io.micronaut.http.netty.body.NettyJsonHandler.writeTo(NettyJsonHandler.java:133)
    at io.micronaut.http.body.DynamicMessageBodyWriter.writeTo(DynamicMessageBodyWriter.java:79)
    at io.micronaut.http.client.netty.DefaultHttpClient.buildNettyRequest(DefaultHttpClient.java:1326)
    at io.micronaut.http.client.netty.DefaultHttpClient.sendRequestThroughChannel(DefaultHttpClient.java:1468)
    at io.micronaut.http.client.netty.DefaultHttpClient.lambda$exchangeImpl$26(DefaultHttpClient.java:1102)
    at reactor.core.publisher.FluxCreate.subscribe(FluxCreate.java:95)
    at reactor.core.publisher.Flux.subscribe(Flux.java:8773)
    at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:195)
    at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82)
    at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82)
    at io.micronaut.http.client.netty.CancellableMonoSink.tryForward(CancellableMonoSink.java:69)
    at io.micronaut.http.client.netty.CancellableMonoSink.tryEmitValue(CancellableMonoSink.java:86)
    at io.micronaut.http.client.netty.ConnectionManager$Pool$ConnectionHolder.emitPoolHandle(ConnectionManager.java:1155)
    at io.micronaut.http.client.netty.ConnectionManager$Pool$Http1ConnectionHolder.dispatch0(ConnectionManager.java:1308)
    at io.micronaut.http.client.netty.ConnectionManager$Pool$ConnectionHolder.dispatch(ConnectionManager.java:1179)
    at io.micronaut.http.client.netty.PoolResizer.dispatchSafe(PoolResizer.java:169)
    at io.micronaut.http.client.netty.PoolResizer.doSomeWork(PoolResizer.java:115)
    at io.micronaut.http.client.netty.PoolResizer.dirty(PoolResizer.java:77)
    at io.micronaut.http.client.netty.PoolResizer.onNewConnectionEstablished1(PoolResizer.java:208)
    at io.micronaut.http.client.netty.ConnectionManager$Pool$Http1ConnectionHolder.init(ConnectionManager.java:1248)
    at io.micronaut.http.client.netty.ConnectionManager$Pool$2$1.channelActive(ConnectionManager.java:1038)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:262)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:231)
    at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelActive(CombinedChannelDuplexHandler.java:412)
    at io.netty.channel.ChannelInboundHandlerAdapter.channelActive(ChannelInboundHandlerAdapter.java:69)
    at io.netty.channel.CombinedChannelDuplexHandler.channelActive(CombinedChannelDuplexHandler.java:211)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:260)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:231)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelActive(DefaultChannelPipeline.java:1398)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:258)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238)
    at io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:895)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:305)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:335)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
    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(Thread.java:833)
krickert commented 1 year ago

I'm getting a class cast exception now as well.

Couple observations now:

  1. This error is the same on a windows machine too running in a WSL environment
  2. I do have consul running, it would give a not found exception if it wasn't because port 8500 would be closed
  3. Same thing happens if you run from the jar directly

I now see a class cast exception, which I pasted above.

From what I can tell - this would be reproduceable when attempting to run in most environments. Since the instructions do say to turn of consul integration on a dev environment, I can see how that would've made it past the tests.

krickert commented 1 year ago
image

Not sure if this helps. I put a breakpoint to where the exception is thrown. TTLCheck is attempting to be casted to HTTPCheck. This behavior is the same on the mac.

krickert commented 1 year ago

I think we might be able to conclude that the discovery client doesn't register the service. I tried this with an http service example, and that too does not work.

graemerocher commented 1 year ago

ok will look into it. Thanks for the feedback, in the meantime you can remove micronaut-serde-jackson and replace it with micronaut-jackson-databind and it will work.

alvarosanchez commented 1 year ago

This looks to me like a duplicate of #385

krickert commented 1 year ago

Thanks for the workaround! Works fine. I also had to add micronaut-discovery-client too.. but this unblocked me. Thanks so much!!!

sdelamo commented 1 year ago

I created an issue to support java.net.InetAddressin Micronaut Serialization. I am able to reproduce the java.lang.ClassCastException: class io.micronaut.discovery.consul.client.v1.TTLCheck cannot be cast to class io.micronaut.discovery.consul.client.v1.HTTPCheck error.

krickert commented 1 year ago

Is there a way to validate if the workaround breaks the health check exposing at the grpc endpoint?

https://micronaut-projects.github.io/micronaut-grpc/latest/guide/#server

Following this guide, to automatically register the health checks it asks that you add the following dependencies:

    <dependency>
      <groupId>io.grpc</groupId>
      <artifactId>grpc-services</artifactId>
    </dependency>
    <dependency>
      <groupId>io.micronaut</groupId>
      <artifactId>micronaut-management</artifactId>
    </dependency>

And the instructions say after this:

If the management dependency (io.micronaut:micronaut-management) is added, then Micronaut’s Health Endpoint can be used to expose the health status of the gRPC server.

For example, if gRPC is running then the /health endpoint will return:

{
"status": "UP",
"details": {
"grpc-server": {
"name": "your-project-name",
"status": "UP",
"details": {
"host": "localhost",
"port": 5050
}
}
},
...
}

This used to work for me. Although consul registers the service fine (still going to test the client - but have another question about that as well)..

I'll be glad to make it a separate bug, but think it's not a bug because I suspect that it's related to this bug and I'm just missing a dependency.

When I try to hit the health check endpoint I get:

> curl http://localhost:50052/health -L
curl: (1) Received HTTP/0.9 when not allowed

And from the running application:

Oct 09, 2023 6:09:15 AM io.grpc.netty.NettyServerTransport notifyTerminated
INFO: Transport failed
io.netty.handler.codec.http2.Http2Exception: Unexpected HTTP/1.x request: GET /health 
    at io.netty.handler.codec.http2.Http2Exception.connectionError(Http2Exception.java:109)
    at io.netty.handler.codec.http2.Http2ConnectionHandler$PrefaceDecoder.readClientPrefaceString(Http2ConnectionHandler.java:317)
    at io.netty.handler.codec.http2.Http2ConnectionHandler$PrefaceDecoder.decode(Http2ConnectionHandler.java:247)
    at io.netty.handler.codec.http2.Http2ConnectionHandler.decode(Http2ConnectionHandler.java:453)
    at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529)
    at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
    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(Thread.java:833)

You can see this if you go to this project https://github.com/krickert/search_indexer

Under the maven modules "services/grpc-vectorizer-service"

It's self-contained, but it is dependent on a parent project (the proto stuff) - but if need be I can make it more self-contained than it is now.

krickert commented 1 year ago

I believe this fixed registering the client - but I think the other direction doesn't work; whenever I try to do a consul lookup by following the directions I'll always get an exception.

Caused by: io.micronaut.http.client.exceptions.HttpClientResponseException: Client 'consul': Error decoding HTTP response body: No bean introspection available for type [class java.net.InetAddress]. Ensure the class is annotated with io.micronaut.core.annotation.Introspected
    at io.micronaut.http.client.netty.DefaultHttpClient$FullHttpResponseHandler.makeNormalBodyParseError(DefaultHttpClient.java:2254)
    at io.micronaut.http.client.netty.DefaultHttpClient$FullHttpResponseHandler.forwardResponseToPromise(DefaultHttpClient.java:2184)

This happened for all clients you can try

krickert commented 1 year ago

Checked the latest snapshot out and everything is working. The workaround (I think?) breaks the client. Downloading the snapshot works. will use the snapshot for now until the release is out.