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

Quarkus集成Smallrye Stork无法解析DNS问题求助

问题

需要向service.example.com服务发送数据,该域名DNS包含CNAME记录及多个A记录(IP和名称已化名)。使用Quarkus原生RestClient时,若首个IP不可达,无法切换至其他IP。尝试用Smallrye Stork解决,但配置后始终报错:Failed to fetch service instances: java.lang.RuntimeException: No DNS server was able to resolve 'service.example.com'。即使指定DNS服务器、更换记录类型(A/AAAA/SRV)、调整hostname格式,或更换无CNAME的x.com测试,问题依旧。想确认是否误解了框架用途,或如何解决该问题。

DNS查询结果(service.example.com)

$ dig service.example.com

; <<>> DiG xxxxxxx <<>> service.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32008
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;service.example.com.       IN  A

;; ANSWER SECTION:
service.example.com.    740 IN  CNAME   service.example.com.some.internal.service.com.
service.example.com.some.internal.service.com. 290 IN A 300.402.251.65
service.example.com.some.internal.service.com. 290 IN A 300.402.250.1
service.example.com.some.internal.service.com. 290 IN A 300.402.249.65
service.example.com.some.internal.service.com. 290 IN A 300.402.248.1

;; Query time: 0 msec
;; SERVER: 10.0.0.102#53(10.0.0.102)
;; WHEN: Mi Apr 10 08:27:42 CEST 2024
;; MSG SIZE  rcvd: 158

报错信息

2024-04-12 13:51:17.596 ERROR [io.sm.st.im.CachingServiceDiscovery:72] [] [] Failed to fetch service instances: java.lang.RuntimeException: No DNS server was able to resolve 'service.example.com'

Quarkus配置(application.properties)

quarkus.stork.my-service.service-discovery.type=dns
quarkus.stork.my-service.service-discovery.hostname=service.example.com
quarkus.stork.my-service.service-discovery.port=8443
quarkus.stork.my-service.service-discovery.secure=true
quarkus.stork.my-service.service-discovery.dns-timeout=8s
quarkus.stork.my-service.service-discovery.dns-servers=dns.dns1.de
quarkus.stork.my-service.service-discovery.record-type=A

RestClient构建代码

RestClientBuilder.newBuilder()
        .baseUri(URI.create("stork://my-service"))
        .build(ServiceHealthInterface.class);

DNS查询结果(x.com)

$ dig x.com

; <<>> DiG xxxxxxx <<>>  x.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28082
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;x.com.             IN  A

;; ANSWER SECTION:
x.com.          292 IN  A   300.144.42.1
x.com.          292 IN  A   300.144.42.129
x.com.          292 IN  A   300.144.42.193
x.com.          292 IN  A   300.144.42.65

;; Query time: 0 msec
;; SERVER: 10.1.1.102#53(10.1.1.102)
;; WHEN: Fr Apr 12 16:02:59 CEST 2024
;; MSG SIZE  rcvd: 98
解决建议

1. 检查DNS服务器可达性

你配置的dns.dns1.de可能在应用运行环境中无法访问。在应用所在机器执行dig @dns.dns1.de service.example.com,确认该DNS服务器能正常解析目标域名。如果无法解析,换成你本地dig命令中使用的可用DNS服务器(比如10.0.0.102或10.1.1.102)。

2. 调整Stork DNS配置参数

  • 移除secure=true:该参数针对SRV记录的DNSSEC验证,你用的是A记录,无需开启,可能干扰解析流程。
  • 显式开启CNAME跟随:添加quarkus.stork.my-service.service-discovery.follow-cname=true,确保Stork能解析CNAME指向的最终A记录。
  • 调整超时时间:把dns-timeout缩短到2秒左右,避免长时间等待无响应的DNS服务器。

修改后的配置示例:

quarkus.stork.my-service.service-discovery.type=dns
quarkus.stork.my-service.service-discovery.hostname=service.example.com
quarkus.stork.my-service.service-discovery.port=8443
quarkus.stork.my-service.service-discovery.dns-timeout=2s
quarkus.stork.my-service.service-discovery.dns-servers=10.0.0.102
quarkus.stork.my-service.service-discovery.record-type=A
quarkus.stork.my-service.service-discovery.follow-cname=true

3. 确认Stork依赖是否正确引入

确保项目中已添加Stork的DNS服务发现依赖:

  • Maven(pom.xml):
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-stork-dns-service-discovery</artifactId>
</dependency>
  • Gradle:
implementation 'io.quarkus:quarkus-stork-dns-service-discovery'

4. 优化RestClient集成方式

改用注入方式创建RestClient,确保Quarkus正确处理Stork集成逻辑:

@Inject
@RestClient
ServiceHealthInterface serviceClient;

同时确保ServiceHealthInterface接口标注了@RegisterRestClient注解。

5. 排查网络环境限制

检查应用所在机器的防火墙或代理规则,确保允许访问指定DNS服务器的UDP 53端口,避免DNS查询被拦截。


内容的提问来源于stack exchange,提问作者Bevor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:44:52