Java SDK接入指南

更新时间:
复制为 MD 格式

通过客户端接入概述您已经了解了 HTTPDNS 接入的基本原理,本文介绍通过 Java SDK 接入 HTTPDNS 的方法。

重要

若为 Android 应用,请优先参考Android SDK接入手册接入。Java SDK 不支持本地持久化缓存和网络变化自动解析等 Android 特有功能。

一、快速入门

1.1 开通服务

请参考快速入门开通HTTPDNS。

1.2 获取配置

请参考开发配置EMAS控制台开发配置中获取AccountId/SecretKey/AESSecretKey等信息,用于初始化SDK。

二、安装配置

根据您的项目构建工具,选择 Gradle 或 Maven 其中一种方式配置即可。

2.1 配置仓库地址

SDK 发布在阿里云 Maven 仓库,需要先添加仓库地址。

Gradle

在 settings.gradle 或 build.gradle 中添加:

repositories {
    maven { 
      url 'https://maven.aliyun.com/nexus/content/repositories/releases/' 
    }
}

Maven

在 pom.xml 中添加:

<repositories>
    <repository>
        <id>aliyun</id>
        <url>https://maven.aliyun.com/nexus/content/repositories/releases/</url>
    </repository>
</repositories>

2.2 添加 SDK 依赖

Gradle

在 build.gradle 的 dependencies 中添加:

dependencies {
    implementation 'com.aliyun.ams:alicloud-java-httpdns:1.0.0'
}

Maven

在 pom.xml 的 <dependencies> 中添加:

<dependency>
    <groupId>com.aliyun.ams</groupId>
    <artifactId>alicloud-java-httpdns</artifactId>
    <version>1.0.0</version>
</dependency>

三、配置和使用

3.1 初始化配置

应用启动后,需要先初始化 SDK,才能调用 HTTPDNS 能力。初始化主要是配置 AccountId/SecretKey 等信息及功能开关。示例代码如下:

import com.alibaba.sdk.java.httpdns.HttpDnsClient;
import com.alibaba.sdk.java.httpdns.InitConfig;
import com.alibaba.sdk.java.httpdns.RequestIpType;

// 创建配置
InitConfig config = new InitConfig.Builder()
    .setSecretKey("your-secret-key")           // 加签密钥
    .setEnableHttps(true)                      // 使用 HTTPS 解析
    .setTimeoutMillis(2000)                    // 超时时间(毫秒)
    .setEnableExpiredIp(true)                  // 允许使用过期 IP
    .enableMemoryCache(true)                   // 启用内存缓存(默认 true)
    .build();

// 初始化
HttpDnsClient.init("your-account-id", config);

// 获取客户端实例
HttpDnsClient client = HttpDnsClient.getClient("your-account-id");
重要
  • setEnableHttps参数设置为true后,计费会增加,请仔细阅读产品计费文档。

  • 如果您对域名信息或SDNS参数有更高的安全诉求,可以配置setAesSecretKey参数启用对解析请求进行内容层加密,使用内容加密后计费会增加,请仔细阅读产品计费文档。

3.1.1 日志配置

应用开发过程中,如果要输出 HTTPDNS 的日志,可以通过 HttpDnsLog 配置:

import com.alibaba.sdk.java.httpdns.log.HttpDnsLog;
import com.alibaba.sdk.java.httpdns.ILogger;

// 开启日志输出
HttpDnsLog.enable(true);

// 设置自定义日志接口
HttpDnsLog.setLogger(new ILogger() {
    @Override
    public void log(String msg) {
        System.out.println("[HTTPDNS] " + msg);
    }
});

3.1.2 SessionId 记录

应用在运行过程中,可以获取 sessionId 记录到数据采集系统中,用于线上问题排查:

String sessionId = client.getSessionId();
System.out.println("SessionId = " + sessionId);

3.2 域名解析

3.2.1 预解析

完成HTTPDNS初始化后,可以对后续可能用到的热点域名配置预解析,以便SDK提前解析,减少后续域名解析时请求的时延,示例代码如下:

List<String> hosts = Arrays.asList("www.aliyun.com", "www.example.com");
client.setPreResolveHosts(hosts, RequestIpType.both);

3.2.2 域名解析

当需要解析域名时,可以通过调用域名解析方法解析域名获取IP,示例代码如下:

HTTPDNSResult result = client.getHttpDnsResultForHostSyncNonBlocking(
    "www.aliyun.com", 
    RequestIpType.both
);

if (result != null && result.getIps() != null) {
    String[] ipv4List = result.getIps();
}

if (result != null && result.getIpv6s() != null) {
    String[] ipv6List = result.getIpv6s();
}

四、后续步骤

获取到 IP 后,需要将其应用到实际的网络请求中,根据实际使用的网络库,可以参考JavaHTTPDNS+OkHttp最佳实践JavaHTTPDNS+Apache HttpClient最佳实践

如果要对SDK进行更精细的配置或者使用鉴权请求等其它功能,可以参考Java SDK API

五、注意事项

  1. 升级SDK后编译失败

    如果您升级SDK版本后,出现编译失败的情况,有可能是因为SDKAPI有调整,请查看Java SDK API使用替换的新接口。

  2. 务必编写降级代码

    降级代码指的是当HTTPDNS无法获取期望结果时,需要降级使用Local DNS去完成域名解析。

  3. 记录从HTTPDNS获取的IPsessionId

    我们提供了用于解析问题排查的解决方案,需要您将从HTTPDNS获取的IPsessionId记录到日志中,详情请参见如何使用“会话追踪方案”排查解析异常