You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus环境中Discord4J机器人无法解析discord.com域名的问题排查求助

Quarkus环境中Discord4J机器人无法解析discord.com域名的问题排查求助

问题概述

  • 直接用Java主类运行Discord4J机器人:一切正常
  • 作为Quarkus主程序的一部分运行:无法解析discord.com的DNS

背景信息

我尝试让Discord4J在Quarkus环境中运行,但遇到了报错。

先是跟着Discord4J的基础机器人教程做,用普通Java主类运行完全没问题。之后我把DiscordClient改成了Quarkus的Bean,结果就出问题了——Reactor Netty突然无法解析discord.com域名了(堆栈信息在下方)。

Quarkus版本的代码和普通主类调用的是同一套逻辑,唯一的区别是Discord令牌从@ConfigMapping注入而不是硬编码,但注入的值是正确的。

已尝试的解决方法

  • 按照一个相关问题的建议强制指定ReactorResource,但没有解决问题
  • 也试了Quarkus的Discord4J扩展,结果遇到了同样的问题——这说明可能不是一直存在的问题,也许和Quarkus的版本更新有关(该扩展的pom显示最后测试用的是Quarkus 3.7,大概是一年前的版本)

我的疑问

我猜测Quarkus(或者Mutiny?)自定义了Netty(或者Reactor Netty?)的配置,但找不到具体细节,也不知道为什么会导致这个错误。

有没有人能帮忙分析一下或者给个排查方向?
任何线索都感激不尽,我对Quarkus的内部机制不够熟悉,不知道从哪里开始查起。提前谢谢大家!

技术栈

  • Discord4J 3.2.7
  • Quarkus 3.18.1(为了测试/排查只引入了ArC)
  • Java 21

附加:堆栈跟踪

精简版

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.com)
2025-02-12 22:07:19,897 WARN  [io.net.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.net.UnknownHostException: Failed to resolve 'discord.com' [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.net.UnknownHostException: Failed to resolve 'discord.com' [A(1)] after 2 queries 
    at io.netty.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 io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1150)
        at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:1097)
        at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:455)
        at io.netty.resolver.dns.DnsResolveContext.access$700(DnsResolveContext.java:70)
        at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:524)
...
Caused by: io.netty.resolver.dns.DnsNameResolverException: [223: /[2001:4860:4860:0:0:0:0:8844]:53] DefaultDnsQuestion(discord.com. IN A) failed to send a query '223' via UDP (no stack trace available)
Caused by: java.net.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 io.netty.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

完整版

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.com)
2025-02-12 22:07:19,897 WARN  [io.net.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.net.UnknownHostException: Failed to resolve 'discord.com' [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 org.keyboardplaying.labs.discord.config.DiscordConfiguration.buildDiscordClient(DiscordConfiguration.java:76)
    at org.keyboardplaying.labs.discord.config.DiscordConfiguration.produceBot(DiscordConfiguration.java:30)
    at org.keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.doCreate(Unknown Source)
    at org.keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.create(Unknown Source)
    at org.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.ComputingCache.computeIfAbsent(ComputingCache.java:69)
    at io.quarkus.arc.impl.ComputingCacheContextInstances.computeIfAbsent(ComputingCacheContextInstances.java:19)
    at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:35)
    at org.keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.get(Unknown Source)
    at org.keyboardplaying.labs.discord.config.DiscordConfiguration_ProducerMethod_produceBot_aihjzrC3vxo3N-4V44lsyBRtCpQ_Bean.get(Unknown Source)
    at org.keyboardplaying.labs.HabotApplication_Bean.doCreate(Unknown Source)
    at org.keyboardplaying.labs.HabotApplication_Bean.create(Unknown Source)
    at org.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_ContextInstances.computeIfAbsent(Unknown Source)
    at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:35)
    at io.quarkus.arc.impl.ClientProxies.getApplicationScopedDelegate(ClientProxies.java:23)
    at org.keyboardplaying.labs.HabotApplication_ClientProxy.arc$delegate(Unknown Source)
    at org.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)

备注:内容来源于stack exchange,提问作者Chop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 03:20:33