Azure Java SDK迁移至com.azure.resourcemanager相关问题咨询
Azure SDK for Java 资源管理库迁移问题解决方案
1. UriQueryBuilder 的替代组件
旧版 SDK 中 com.microsoft.azure.management 包下的 UriQueryBuilder 已整合到新版核心包的 URI 构建工具中,对应替代类为 com.azure.core.util.UriBuilder,属于 azure-core 依赖,内置了查询参数拼接、URI 各段设置的全部能力,不需要单独使用查询参数构造类。
基础使用示例:
import com.azure.core.util.UriBuilder; // 构建带查询参数的URI String requestUri = new UriBuilder() .setScheme("https") .setHost("management.azure.com") .setPath("/subscriptions/your-sub-id/resourceGroups") .addQueryParameter("api-version", "2021-04-01") .addQueryParameter("$filter", "tagName eq 'env'") .buildString();
2. 旧版 RestClient 配置的迁移实现
新版 SDK 移除了旧版 RestClient 类,对应的 HTTP 客户端配置、序列化配置、凭证配置能力全部整合到客户端构建逻辑和 HttpPipeline 体系中,你给出的旧配置项对应迁移方式如下:
withBaseUrl(AzureEnvironment.AZURE, endpoint):新版环境类迁移为com.azure.core.management.AzureEnvironment,公有云环境直接使用AzureEnvironment.AZURE,可在构建资源管理客户端时通过withEnvironment()方法指定,自定义 endpoint 可在构建对应服务客户端时传入。withSerializerAdapter(new AzureJacksonAdapter()):新版默认内置适配 Azure 资源接口的 Jackson 序列化实现,不需要手动指定序列化适配器;如果需要自定义序列化规则,可传入com.azure.core.util.serializer.JacksonAdapter的自定义实例。withReadTimeout(150, TimeUnit.SECONDS):超时配置迁移到 HTTP 客户端实例的配置项中,默认 Netty 客户端可通过NettyAsyncHttpClientBuilder设置响应超时。withResponseBuilderFactory(new AzureResponseBuilder.Factory()):新版 SDK 在核心 HTTP 管道层内置了 Azure 响应解析、错误转换逻辑,不需要手动指定响应构建工厂。withCredentials(azureTokenCredentials):新版凭证体系统一为com.azure.core.credential.TokenCredential接口,可使用ClientSecretCredential、DefaultAzureCredential等实现类替代旧版AzureTokenCredentials,在客户端认证阶段传入即可。
和你给出的旧代码等效的新版配置示例:
import com.azure.core.management.AzureEnvironment; import com.azure.core.http.HttpClient; import com.azure.core.http.netty.NettyAsyncHttpClientBuilder; import com.azure.resourcemanager.AzureResourceManager; import com.azure.identity.DefaultAzureCredentialBuilder; import java.time.Duration; // 配置150秒读超时的HTTP客户端 HttpClient customHttpClient = new NettyAsyncHttpClientBuilder() .responseTimeout(Duration.ofSeconds(150)) .build(); // 构建等效配置的资源管理客户端 AzureResourceManager azureClient = AzureResourceManager.configure() .withEnvironment(AzureEnvironment.AZURE) .withHttpClient(customHttpClient) // 替换为你实际使用的TokenCredential实现和订阅ID .authenticate(new DefaultAzureCredentialBuilder().build(), "your-subscription-id") .withDefaultSubscription();
如果需要更底层的自定义 HTTP 请求能力,可通过 HttpPipelineBuilder 构建自定义 HTTP 管道,搭配各服务客户端的 builder 使用,不需要再手动实例化类似旧版 RestClient 的通用客户端。
内容的提问来源于stack exchange,提问作者jrphqc
相关产品推荐
相关产品推荐

