java - Does Quarkus customize Reactor Netty? - Stack Overflow

Short versionDiscord4j bot run from a Java main: works fineDiscord4j bot run as part of a Quarkus main

Short version

  • Discord4j bot run from a Java main: works fine
  • Discord4j bot run as part of a Quarkus main: fails to resolve DNS for discord

What does Quarkus do that would prevent

The context

I'm trying to make Discord4j work in Quarkus, but I encounter some errors.

Basically, I followed Discord4j's tutorial for a basic bot, and it works fine if I run in from a Java main method.

Then, I made my DiscordClient a Quarkus bean, and all hell broke lose. Well, maybe not that much, but suddenly, Reactor Netty can't resolve the discord domain anymore (stack available below).

The Quarkus code and the main method call the same code. The only difference is that the Discord token comes from a @ConfigMapping instead of being hard-coded, but the value is correctly injected.

Things I tried

  • I tried forcing the ReactorResource as suggested on another, apparently related SO question from a year ago, but it didn't solve anything.
  • I also gave the Quarkus Discord4j a quick try, but it seems to exhibit the same symptoms -> this would suggest this was not always an issue, maybe something related to an evolution of Quarkus (project's pom suggests it was last tested with Quarkus 3.7, probably a year ago).

The question

I'm guessing Quarkus (Mutiny?) is customizing the Netty (Reactor Netty?) configuration, but I can't find details about that, or how it would lead to that error.

Can anyone shed some light or share a lead to solve my issue? Any direction will be appreciated, I just don't know Quarkus's entrails enough to know where to begin investigating.

Thanks in advance.

Technical stack

  • Discord4j 3.2.7
  • Quarkus 3.18.1 (going bare bone to test/solve, including only ArC)
  • Java 21

Addendum: the stack trace

Abbreviated

2025-02-12 22:07:18,136 INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [cdi]
2025-02-12 22:07:19,424 INFO  [dis.cor.DiscordClientBuilder] (Quarkus Main Thread) Discord4J 3.2.6-5-g501ec30 ()
2025-02-12 22:07:19,897 WARN  [io.res.dns.DefaultDnsServerAddressStreamProvider] (d4j-limiter-1) Default DNS servers: [/[2001:4860:4860:0:0:0:0:8888]:53, /[2001:4860:4860:0:0:0:0:8844]:53] (Google Public DNS as a fallback)
2025-02-12 22:07:20,153 ERROR [io.qua.run.Application] (Quarkus Main Thread) Failed to start application

Exception in DiscordConfiguration.java:76
      74          });
      75  
    → 76          login.block();
      77          return client;
      78      }
...

: reactor.core.Exceptions$ReactiveException: java.UnknownHostException: Failed to resolve 'discord' [A(1)] after 2 queries 
    at reactor.core.Exceptions.propagate(Exceptions.java:396)
    at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:97)
    at reactor.core.publisher.Mono.block(Mono.java:1742)
...
Caused by: java.UnknownHostException: Failed to resolve 'discord' [A(1)] after 2 queries 
    at ioty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1150)
    Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: 
Error has been observed at the following site(s):
    *__checkpoint ⇢ Request to GET /gateway/bot [RequestStream]
    *__checkpoint ⇢ Request to GET /gateway/bot [DefaultRouter]
Original Stack Trace:
        at ioty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1150)
        at ioty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1097)
        at ioty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:455)
        at ioty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:70)
        at ioty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:524)
...
Caused by: ioty.resolver.dns.DnsNameResolverException: [223: /[2001:4860:4860:0:0:0:0:8844]:53] DefaultDnsQuestion(discord. IN A) failed to send a query '223' via UDP (no stack trace available)
Caused by: java.SocketException: Network is unreachable: sendto
    at java.base/sun.nio.ch.DatagramChannelImpl.send0(Native Method)
    at java.base/sun.nio.ch.DatagramChannelImpl.sendFromNativeBuffer(DatagramChannelImpl.java:1005)
    at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:966)
    at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:889)
    at ioty.channel.socket.nio.NioDatagramChannel.doWriteMessage(NioDatagramChannel.java:297)
...
2025-02-12 22:07:20,200 INFO  [io.quarkus] (Quarkus Main Thread) mybot stopped in 0.011s

Full

2025-02-12 22:07:18,129 INFO  [io.quarkus] (Quarkus Main Thread) mybot 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.18.1) started in 2.662s. 
2025-02-12 22:07:18,136 INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
2025-02-12 22:07:18,136 INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [cdi]
2025-02-12 22:07:19,424 INFO  [dis.cor.DiscordClientBuilder] (Quarkus Main Thread) Discord4J 3.2.6-5-g501ec30 ()
2025-02-12 22:07:19,897 WARN  [io.res.dns.DefaultDnsServerAddressStreamProvider] (d4j-limiter-1) Default DNS servers: [/[2001:4860:4860:0:0:0:0:8888]:53, /[2001:4860:4860:0:0:0:0:8844]:53] (Google Public DNS as a fallback)
2025-02-12 22:07:20,153 ERROR [io.qua.run.Application] (Quarkus Main Thread) Failed to start application

Exception in DiscordConfiguration.java:76
      74          });
      75  
    → 76          login.block();
      77          return client;
      78      }



Exception in DiscordConfiguration.java:30
      28          log.debug("Producing Discord bot");
      29  
    → 30          return buildDiscordClient(config.token());
      31      }
      32  

: reactor.core.Exceptions$ReactiveException: java.UnknownHostException: Failed to resolve 'discord' [A(1)] after 2 queries 
    at reactor.core.Exceptions.propagate(Exceptions.java:396)
    at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:97)
    at reactor.core.publisher.Mono.block(Mono.java:1742)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration.buildDiscordClient(DiscordConfiguration.java:76)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration.produceBot(DiscordConfiguration.java:30)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.doCreate(Unknown Source)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.create(Unknown Source)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.create(Unknown Source)
    at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:119)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:38)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:35)
    at io.quarkus.arc.impl.LazyValue.get(LazyValue.java:32)
    at io.quarkus.arc.impl.ComputingCacheputeIfAbsent(ComputingCache.java:69)
    at io.quarkus.arc.impl.ComputingCacheContextInstancesputeIfAbsent(ComputingCacheContextInstances.java:19)
    at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:35)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.get(Unknown Source)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.get(Unknown Source)
    at .keyboardplaying.labs.HabotApplication_Bean.doCreate(Unknown Source)
    at .keyboardplaying.labs.HabotApplication_Bean.create(Unknown Source)
    at .keyboardplaying.labs.HabotApplication_Bean.create(Unknown Source)
    at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:119)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:38)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:35)
    at io.quarkus.arc.generator.Default_jakarta_enterprise_context_ApplicationScoped_ContextInstances.c0(Unknown Source)
    at io.quarkus.arc.generator.Default_jakarta_enterprise_context_ApplicationScoped_ContextInstancesputeIfAbsent(Unknown Source)
    at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:35)
    at io.quarkus.arc.impl.ClientProxies.getApplicationScopedDelegate(ClientProxies.java:23)
    at .keyboardplaying.labs.HabotApplication_ClientProxy.arc$delegate(Unknown Source)
    at .keyboardplaying.labs.HabotApplication_ClientProxy.run(Unknown Source)
    at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:143)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:77)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:48)
    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:116)
    at java.base/java.lang.Thread.run(Thread.java:1583)
    Suppressed: java.lang.Exception: #block terminated with an error
        at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:99)
        at reactor.core.publisher.Mono.block(Mono.java:1742)
        at .keyboardplaying.labs.discord.config.DiscordConfiguration.buildDiscordClient(DiscordConfiguration.java:76)
        at .keyboardplaying.labs.discord.config.DiscordConfiguration.produceBot(DiscordConfiguration.java:30)
        ... 32 more
Caused by: java.UnknownHostException: Failed to resolve 'discord' [A(1)] after 2 queries 
    at ioty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1150)
    Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: 
Error has been observed at the following site(s):
    *__checkpoint ⇢ Request to GET /gateway/bot [RequestStream]
    *__checkpoint ⇢ Request to GET /gateway/bot [DefaultRouter]
Original Stack Trace:
        at ioty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1150)
        at ioty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1097)
        at ioty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:455)
        at ioty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:70)
        at ioty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:524)
        at ioty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
        at ioty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
        at ioty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
        at ioty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
        at ioty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
        at ioty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
        at ioty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
        at ioty.resolver.dns.DnsQueryContext.finishFailure(DnsQueryContext.java:343)
        at ioty.resolver.dns.DnsQueryContext.onQueryWriteCompletion(DnsQueryContext.java:264)
        at ioty.resolver.dns.DnsQueryContext.access$600(DnsQueryContext.java:51)
        at ioty.resolver.dns.DnsQueryContext$3.operationComplete(DnsQueryContext.java:255)
        at ioty.resolver.dns.DnsQueryContext$3.operationComplete(DnsQueryContext.java:252)
        at ioty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
        at ioty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
        at ioty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
        at ioty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
        at ioty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
        at ioty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
        at ioty.util.internal.PromiseNotificationUtil.tryFailure(PromiseNotificationUtil.java:64)
        at ioty.channel.ChannelOutboundBuffer.safeFail(ChannelOutboundBuffer.java:754)
        at ioty.channel.ChannelOutboundBuffer.remove0(ChannelOutboundBuffer.java:339)
        at ioty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:319)
        at ioty.channel.nio.AbstractNioMessageChannel.doWrite(AbstractNioMessageChannel.java:158)
        at ioty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:929)
        at ioty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:359)
        at ioty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:893)
        at ioty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1319)
        at ioty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:935)
        at ioty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:921)
        at ioty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:907)
        at ioty.channel.DefaultChannelPipeline.flush(DefaultChannelPipeline.java:916)
        at ioty.channel.AbstractChannel.flush(AbstractChannel.java:253)
        at ioty.resolver.dns.DnsResolveContext.internalResolve(DnsResolveContext.java:398)
        at ioty.resolver.dns.DnsResolveContext.resolve(DnsResolveContext.java:247)
        at ioty.resolver.dns.DnsNameResolver.resolveNow(DnsNameResolver.java:1302)
        at ioty.resolver.dns.DnsNameResolver.doResolveAllUncached0(DnsNameResolver.java:1286)
        at ioty.resolver.dns.DnsNameResolver.doResolveAllUncached(DnsNameResolver.java:1227)
        at ioty.resolver.dns.DnsNameResolver.doResolveAllNow(DnsNameResolver.java:1156)
        at ioty.resolver.dns.DnsNameResolver.access$600(DnsNameResolver.java:96)
        at ioty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1145)
        at ioty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1142)
        at ioty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
        at ioty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
        at ioty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
        at ioty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
        at ioty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
        at ioty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95)
        at ioty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30)
        at ioty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380)
        at ioty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
        at ioty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
        at ioty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
        at ioty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
        at ioty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
        at ioty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at ioty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: ioty.resolver.dns.DnsNameResolverException: [223: /[2001:4860:4860:0:0:0:0:8844]:53] DefaultDnsQuestion(discord. IN A) failed to send a query '223' via UDP (no stack trace available)
Caused by: java.SocketException: Network is unreachable: sendto
    at java.base/sun.nio.ch.DatagramChannelImpl.send0(Native Method)
    at java.base/sun.nio.ch.DatagramChannelImpl.sendFromNativeBuffer(DatagramChannelImpl.java:1005)
    at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:966)
    at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:889)
    at ioty.channel.socket.nio.NioDatagramChannel.doWriteMessage(NioDatagramChannel.java:297)
    at ioty.channel.nio.AbstractNioMessageChannel.doWrite(AbstractNioMessageChannel.java:143)
    at ioty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:929)
    at ioty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:359)
    at ioty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:893)
    at ioty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1319)
    at ioty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:935)
    at ioty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:921)
    at ioty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:907)
    at ioty.channel.DefaultChannelPipeline.flush(DefaultChannelPipeline.java:916)
    at ioty.channel.AbstractChannel.flush(AbstractChannel.java:253)
    at ioty.resolver.dns.DnsResolveContext.internalResolve(DnsResolveContext.java:398)
    at ioty.resolver.dns.DnsResolveContext.resolve(DnsResolveContext.java:247)
    at ioty.resolver.dns.DnsNameResolver.resolveNow(DnsNameResolver.java:1302)
    at ioty.resolver.dns.DnsNameResolver.doResolveAllUncached0(DnsNameResolver.java:1286)
    at ioty.resolver.dns.DnsNameResolver.doResolveAllUncached(DnsNameResolver.java:1227)
    at ioty.resolver.dns.DnsNameResolver.doResolveAllNow(DnsNameResolver.java:1156)
    at ioty.resolver.dns.DnsNameResolver.access$600(DnsNameResolver.java:96)
    at ioty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1145)
    at ioty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1142)
    at ioty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
    at ioty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
    at ioty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
    at ioty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
    at ioty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
    at ioty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95)
    at ioty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30)
    at ioty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380)
    at ioty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
    at ioty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
    at ioty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
    at ioty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
    at ioty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
    at ioty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at ioty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.base/java.lang.Thread.run(Thread.java:1583)

2025-02-12 22:07:20,200 INFO  [io.quarkus] (Quarkus Main Thread) mybot stopped in 0.011s

Short version

  • Discord4j bot run from a Java main: works fine
  • Discord4j bot run as part of a Quarkus main: fails to resolve DNS for discord

What does Quarkus do that would prevent

The context

I'm trying to make Discord4j work in Quarkus, but I encounter some errors.

Basically, I followed Discord4j's tutorial for a basic bot, and it works fine if I run in from a Java main method.

Then, I made my DiscordClient a Quarkus bean, and all hell broke lose. Well, maybe not that much, but suddenly, Reactor Netty can't resolve the discord domain anymore (stack available below).

The Quarkus code and the main method call the same code. The only difference is that the Discord token comes from a @ConfigMapping instead of being hard-coded, but the value is correctly injected.

Things I tried

  • I tried forcing the ReactorResource as suggested on another, apparently related SO question from a year ago, but it didn't solve anything.
  • I also gave the Quarkus Discord4j a quick try, but it seems to exhibit the same symptoms -> this would suggest this was not always an issue, maybe something related to an evolution of Quarkus (project's pom suggests it was last tested with Quarkus 3.7, probably a year ago).

The question

I'm guessing Quarkus (Mutiny?) is customizing the Netty (Reactor Netty?) configuration, but I can't find details about that, or how it would lead to that error.

Can anyone shed some light or share a lead to solve my issue? Any direction will be appreciated, I just don't know Quarkus's entrails enough to know where to begin investigating.

Thanks in advance.

Technical stack

  • Discord4j 3.2.7
  • Quarkus 3.18.1 (going bare bone to test/solve, including only ArC)
  • Java 21

Addendum: the stack trace

Abbreviated

2025-02-12 22:07:18,136 INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [cdi]
2025-02-12 22:07:19,424 INFO  [dis.cor.DiscordClientBuilder] (Quarkus Main Thread) Discord4J 3.2.6-5-g501ec30 (https://discord4j)
2025-02-12 22:07:19,897 WARN  [io.res.dns.DefaultDnsServerAddressStreamProvider] (d4j-limiter-1) Default DNS servers: [/[2001:4860:4860:0:0:0:0:8888]:53, /[2001:4860:4860:0:0:0:0:8844]:53] (Google Public DNS as a fallback)
2025-02-12 22:07:20,153 ERROR [io.qua.run.Application] (Quarkus Main Thread) Failed to start application

Exception in DiscordConfiguration.java:76
      74          });
      75  
    → 76          login.block();
      77          return client;
      78      }
...

: reactor.core.Exceptions$ReactiveException: java.UnknownHostException: Failed to resolve 'discord' [A(1)] after 2 queries 
    at reactor.core.Exceptions.propagate(Exceptions.java:396)
    at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:97)
    at reactor.core.publisher.Mono.block(Mono.java:1742)
...
Caused by: java.UnknownHostException: Failed to resolve 'discord' [A(1)] after 2 queries 
    at ioty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1150)
    Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: 
Error has been observed at the following site(s):
    *__checkpoint ⇢ Request to GET /gateway/bot [RequestStream]
    *__checkpoint ⇢ Request to GET /gateway/bot [DefaultRouter]
Original Stack Trace:
        at ioty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1150)
        at ioty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1097)
        at ioty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:455)
        at ioty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:70)
        at ioty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:524)
...
Caused by: ioty.resolver.dns.DnsNameResolverException: [223: /[2001:4860:4860:0:0:0:0:8844]:53] DefaultDnsQuestion(discord. IN A) failed to send a query '223' via UDP (no stack trace available)
Caused by: java.SocketException: Network is unreachable: sendto
    at java.base/sun.nio.ch.DatagramChannelImpl.send0(Native Method)
    at java.base/sun.nio.ch.DatagramChannelImpl.sendFromNativeBuffer(DatagramChannelImpl.java:1005)
    at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:966)
    at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:889)
    at ioty.channel.socket.nio.NioDatagramChannel.doWriteMessage(NioDatagramChannel.java:297)
...
2025-02-12 22:07:20,200 INFO  [io.quarkus] (Quarkus Main Thread) mybot stopped in 0.011s

Full

2025-02-12 22:07:18,129 INFO  [io.quarkus] (Quarkus Main Thread) mybot 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.18.1) started in 2.662s. 
2025-02-12 22:07:18,136 INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
2025-02-12 22:07:18,136 INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [cdi]
2025-02-12 22:07:19,424 INFO  [dis.cor.DiscordClientBuilder] (Quarkus Main Thread) Discord4J 3.2.6-5-g501ec30 (https://discord4j)
2025-02-12 22:07:19,897 WARN  [io.res.dns.DefaultDnsServerAddressStreamProvider] (d4j-limiter-1) Default DNS servers: [/[2001:4860:4860:0:0:0:0:8888]:53, /[2001:4860:4860:0:0:0:0:8844]:53] (Google Public DNS as a fallback)
2025-02-12 22:07:20,153 ERROR [io.qua.run.Application] (Quarkus Main Thread) Failed to start application

Exception in DiscordConfiguration.java:76
      74          });
      75  
    → 76          login.block();
      77          return client;
      78      }



Exception in DiscordConfiguration.java:30
      28          log.debug("Producing Discord bot");
      29  
    → 30          return buildDiscordClient(config.token());
      31      }
      32  

: reactor.core.Exceptions$ReactiveException: java.UnknownHostException: Failed to resolve 'discord' [A(1)] after 2 queries 
    at reactor.core.Exceptions.propagate(Exceptions.java:396)
    at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:97)
    at reactor.core.publisher.Mono.block(Mono.java:1742)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration.buildDiscordClient(DiscordConfiguration.java:76)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration.produceBot(DiscordConfiguration.java:30)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.doCreate(Unknown Source)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.create(Unknown Source)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.create(Unknown Source)
    at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:119)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:38)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:35)
    at io.quarkus.arc.impl.LazyValue.get(LazyValue.java:32)
    at io.quarkus.arc.impl.ComputingCacheputeIfAbsent(ComputingCache.java:69)
    at io.quarkus.arc.impl.ComputingCacheContextInstancesputeIfAbsent(ComputingCacheContextInstances.java:19)
    at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:35)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.get(Unknown Source)
    at .keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.get(Unknown Source)
    at .keyboardplaying.labs.HabotApplication_Bean.doCreate(Unknown Source)
    at .keyboardplaying.labs.HabotApplication_Bean.create(Unknown Source)
    at .keyboardplaying.labs.HabotApplication_Bean.create(Unknown Source)
    at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:119)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:38)
    at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:35)
    at io.quarkus.arc.generator.Default_jakarta_enterprise_context_ApplicationScoped_ContextInstances.c0(Unknown Source)
    at io.quarkus.arc.generator.Default_jakarta_enterprise_context_ApplicationScoped_ContextInstancesputeIfAbsent(Unknown Source)
    at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:35)
    at io.quarkus.arc.impl.ClientProxies.getApplicationScopedDelegate(ClientProxies.java:23)
    at .keyboardplaying.labs.HabotApplication_ClientProxy.arc$delegate(Unknown Source)
    at .keyboardplaying.labs.HabotApplication_ClientProxy.run(Unknown Source)
    at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:143)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:77)
    at io.quarkus.runtime.Quarkus.run(Quarkus.java:48)
    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:116)
    at java.base/java.lang.Thread.run(Thread.java:1583)
    Suppressed: java.lang.Exception: #block terminated with an error
        at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:99)
        at reactor.core.publisher.Mono.block(Mono.java:1742)
        at .keyboardplaying.labs.discord.config.DiscordConfiguration.buildDiscordClient(DiscordConfiguration.java:76)
        at .keyboardplaying.labs.discord.config.DiscordConfiguration.produceBot(DiscordConfiguration.java:30)
        ... 32 more
Caused by: java.UnknownHostException: Failed to resolve 'discord' [A(1)] after 2 queries 
    at ioty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1150)
    Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: 
Error has been observed at the following site(s):
    *__checkpoint ⇢ Request to GET /gateway/bot [RequestStream]
    *__checkpoint ⇢ Request to GET /gateway/bot [DefaultRouter]
Original Stack Trace:
        at ioty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1150)
        at ioty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1097)
        at ioty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:455)
        at ioty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:70)
        at ioty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:524)
        at ioty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
        at ioty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
        at ioty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
        at ioty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
        at ioty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
        at ioty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
        at ioty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
        at ioty.resolver.dns.DnsQueryContext.finishFailure(DnsQueryContext.java:343)
        at ioty.resolver.dns.DnsQueryContext.onQueryWriteCompletion(DnsQueryContext.java:264)
        at ioty.resolver.dns.DnsQueryContext.access$600(DnsQueryContext.java:51)
        at ioty.resolver.dns.DnsQueryContext$3.operationComplete(DnsQueryContext.java:255)
        at ioty.resolver.dns.DnsQueryContext$3.operationComplete(DnsQueryContext.java:252)
        at ioty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
        at ioty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
        at ioty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
        at ioty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
        at ioty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
        at ioty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
        at ioty.util.internal.PromiseNotificationUtil.tryFailure(PromiseNotificationUtil.java:64)
        at ioty.channel.ChannelOutboundBuffer.safeFail(ChannelOutboundBuffer.java:754)
        at ioty.channel.ChannelOutboundBuffer.remove0(ChannelOutboundBuffer.java:339)
        at ioty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:319)
        at ioty.channel.nio.AbstractNioMessageChannel.doWrite(AbstractNioMessageChannel.java:158)
        at ioty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:929)
        at ioty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:359)
        at ioty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:893)
        at ioty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1319)
        at ioty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:935)
        at ioty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:921)
        at ioty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:907)
        at ioty.channel.DefaultChannelPipeline.flush(DefaultChannelPipeline.java:916)
        at ioty.channel.AbstractChannel.flush(AbstractChannel.java:253)
        at ioty.resolver.dns.DnsResolveContext.internalResolve(DnsResolveContext.java:398)
        at ioty.resolver.dns.DnsResolveContext.resolve(DnsResolveContext.java:247)
        at ioty.resolver.dns.DnsNameResolver.resolveNow(DnsNameResolver.java:1302)
        at ioty.resolver.dns.DnsNameResolver.doResolveAllUncached0(DnsNameResolver.java:1286)
        at ioty.resolver.dns.DnsNameResolver.doResolveAllUncached(DnsNameResolver.java:1227)
        at ioty.resolver.dns.DnsNameResolver.doResolveAllNow(DnsNameResolver.java:1156)
        at ioty.resolver.dns.DnsNameResolver.access$600(DnsNameResolver.java:96)
        at ioty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1145)
        at ioty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1142)
        at ioty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
        at ioty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
        at ioty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
        at ioty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
        at ioty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
        at ioty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95)
        at ioty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30)
        at ioty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380)
        at ioty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
        at ioty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
        at ioty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
        at ioty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
        at ioty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
        at ioty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at ioty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: ioty.resolver.dns.DnsNameResolverException: [223: /[2001:4860:4860:0:0:0:0:8844]:53] DefaultDnsQuestion(discord. IN A) failed to send a query '223' via UDP (no stack trace available)
Caused by: java.SocketException: Network is unreachable: sendto
    at java.base/sun.nio.ch.DatagramChannelImpl.send0(Native Method)
    at java.base/sun.nio.ch.DatagramChannelImpl.sendFromNativeBuffer(DatagramChannelImpl.java:1005)
    at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:966)
    at java.base/sun.nio.ch.DatagramChannelImpl.send(DatagramChannelImpl.java:889)
    at ioty.channel.socket.nio.NioDatagramChannel.doWriteMessage(NioDatagramChannel.java:297)
    at ioty.channel.nio.AbstractNioMessageChannel.doWrite(AbstractNioMessageChannel.java:143)
    at ioty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:929)
    at ioty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:359)
    at ioty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:893)
    at ioty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1319)
    at ioty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:935)
    at ioty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:921)
    at ioty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:907)
    at ioty.channel.DefaultChannelPipeline.flush(DefaultChannelPipeline.java:916)
    at ioty.channel.AbstractChannel.flush(AbstractChannel.java:253)
    at ioty.resolver.dns.DnsResolveContext.internalResolve(DnsResolveContext.java:398)
    at ioty.resolver.dns.DnsResolveContext.resolve(DnsResolveContext.java:247)
    at ioty.resolver.dns.DnsNameResolver.resolveNow(DnsNameResolver.java:1302)
    at ioty.resolver.dns.DnsNameResolver.doResolveAllUncached0(DnsNameResolver.java:1286)
    at ioty.resolver.dns.DnsNameResolver.doResolveAllUncached(DnsNameResolver.java:1227)
    at ioty.resolver.dns.DnsNameResolver.doResolveAllNow(DnsNameResolver.java:1156)
    at ioty.resolver.dns.DnsNameResolver.access$600(DnsNameResolver.java:96)
    at ioty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1145)
    at ioty.resolver.dns.DnsNameResolver$7.operationComplete(DnsNameResolver.java:1142)
    at ioty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
    at ioty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
    at ioty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
    at ioty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
    at ioty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:185)
    at ioty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95)
    at ioty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30)
    at ioty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:380)
    at ioty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
    at ioty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
    at ioty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
    at ioty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
    at ioty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
    at ioty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at ioty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.base/java.lang.Thread.run(Thread.java:1583)

2025-02-12 22:07:20,200 INFO  [io.quarkus] (Quarkus Main Thread) mybot stopped in 0.011s
Share Improve this question asked Feb 12 at 21:25 ChopChop 4,5695 gold badges30 silver badges60 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 1

If your Discord4j bot works in plain Java but fails in Quarkus when resolving DNS for discord, the issue might be related to Quarkus' network configuration. Try forcing IPv4 by adding System.setProperty("java.preferIPv4Stack", "true"); at the start of your code. Also, ensure your Netty and Reactor dependencies are up to date and that Quarkus has proper network permissions. If the issue persists, configure a custom DNS resolver in Reactor Netty!!! :)

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745201073a4616326.html

相关推荐

  • java - Does Quarkus customize Reactor Netty? - Stack Overflow

    Short versionDiscord4j bot run from a Java main: works fineDiscord4j bot run as part of a Quarkus main

    4小时前
    40

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信