Azure Data Lake Java:让派生客户端留在代理管线上
从已配置代理的 DataLakeServiceClient 派生文件系统客户端,并在同一套设置中配置身份令牌的传输。
最后一行很关键:从已配置的服务派生文件系统客户端,而不是再启动一个默认 builder:
var proxy = new ProxyOptions(
ProxyOptions.Type.HTTP,
new InetSocketAddress("proxy.example.net", 8080));
var http = new NettyAsyncHttpClientBuilder()
.proxy(proxy)
.build();
var credential = new ClientSecretCredentialBuilder()
.tenantId(tenantId)
.clientId(clientId)
.clientSecret(clientSecret)
.httpClient(http)
.build();
var service = new DataLakeServiceClientBuilder()
.endpoint(accountUrl)
.credential(credential)
.httpClient(http)
.buildClient();
var filesystem = service.getFileSystemClient(fileSystemName);service.getFileSystemClient(fileSystemName) 会把父对象的 HTTP 管线、账户终结点和适用的存储配置带入子对象。
示例把同一个 http 交给凭据 builder,因为获取令牌也是另一条请求路径。单独构建的文件系统客户端同样必须拿到它应有的传输通道;此前的 builder 不会创建全局 SDK 默认值。
请使用应用的账户 URL、文件系统名称和身份值。ProxyOptions 与 Netty 传输类型来自 Azure Core,凭据 builder 来自 Azure Identity,服务 builder 来自 Azure Storage Data Lake;InetSocketAddress 来自 java.net。
accountUrl 仍是存储终结点,文件系统名称则选择子对象。两者都不是代理地址。若存储终结点可公开访问且允许使用公共中介,可从 HTTP 代理列表 中选择 ProxyOptions 的主机和端口;存储与身份设置保持不变。