in dubbo-registry-extensions/dubbo-registry-dns/src/main/java/org/apache/dubbo/registry/dns/util/DNSResolver.java [57:101]
public ResolveResult resolve(String path) {
ResolveResult recordList = new ResolveResult();
try {
Future<List<InetAddress>> hostFuture = resolver.resolveAll(path);
Future<AddressedEnvelope<DnsResponse, InetSocketAddress>> srvFuture =
resolver.query(new DefaultDnsQuestion(path, DnsRecordType.SRV));
try {
recordList.getHostnameList()
.addAll(hostFuture
.sync().getNow()
.stream()
.map(InetAddress::getHostAddress)
.collect(Collectors.toList()));
DnsResponse srvResponse = srvFuture.sync().getNow().content();
for (int i = 0; i < srvResponse.count(DnsSection.ANSWER); i++) {
DnsRawRecord record = srvResponse.recordAt(DnsSection.ANSWER, i);
ByteBuf buf = record.content();
// Priority
buf.readUnsignedShort();
// Weight
buf.readUnsignedShort();
// Port
int port = buf.readUnsignedShort();
recordList.getPort().add(port);
}
} catch (InterruptedException e) {
logger.warn("Waiting DNS resolve interrupted. " + e.getLocalizedMessage());
}
} catch (Throwable t) {
if (t instanceof UnknownHostException) {
if (logger.isInfoEnabled()) {
logger.info(t.getLocalizedMessage());
}
} else {
logger.error(t.getLocalizedMessage());
}
}
return recordList;
}