如何在Microsoft Graph API 6中配置超时与重试设置?
Microsoft Graph API 6 超时与重试配置方案
Graph API 6.x 不再支持直接注入自定义HttpClient实例,而是通过OkHttpRequestAdapter来配置HTTP相关参数,以下是具体实现方式:
一、超时配置
通过OkHttpClient.Builder直接设置各类超时参数,再将其传入OkHttpRequestAdapter:
connectTimeout: 连接目标服务器的超时时间readTimeout: 读取服务器响应的超时时间writeTimeout: 向服务器写入请求的超时时间callTimeout: 整个请求生命周期的总超时时间
二、重试配置
可选择两种方式实现重试:
- 使用内置RetryHandler:API提供了默认重试策略,可按需调整参数
- 自定义OkHttp拦截器:完全自定义重试逻辑,替代默认行为
完整代码示例
方式1:自定义HttpClient+自定义重试拦截器
// 定义常量(根据实际业务调整) private static final int MAX_IDLE_CONNECTIONS = 5; private static final long KEEP_ALIVE_DURATION_MINUTES = 5; private static final Duration CONNECT_TIMEOUT_DURATION = Duration.ofSeconds(10); private static final Duration CALL_TIMEOUT_DURATION = Duration.ofMinutes(1); private static final Duration READ_TIMEOUT_DURATION = Duration.ofSeconds(30); private static final Duration WRITE_TIMEOUT_DURATION = Duration.ofSeconds(30); // 1. 构建自定义OkHttpClient OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectionPool(new ConnectionPool(MAX_IDLE_CONNECTIONS, KEEP_ALIVE_DURATION_MINUTES, TimeUnit.MINUTES)) .connectTimeout(CONNECT_TIMEOUT_DURATION) .callTimeout(CALL_TIMEOUT_DURATION) .readTimeout(READ_TIMEOUT_DURATION) .writeTimeout(WRITE_TIMEOUT_DURATION) .retryOnConnectionFailure(false) // 关闭OkHttp默认重试 .addInterceptor(buildRetryHandlerInterceptor()) // 添加自定义重试拦截器 .build(); // 2. 创建请求适配器 OkHttpRequestAdapter requestAdapter = new OkHttpRequestAdapter( new TokenCredentialAuthenticationProvider(tokenCredential(cred)), okHttpClient ); // 3. 构建GraphServiceClient GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
方式2:使用内置RetryHandler配置重试
// 配置内置重试策略 RetryHandler retryHandler = new RetryHandler() .setMaxRetries(3) // 最大重试次数 .setDelay(Duration.ofSeconds(1)) // 初始重试延迟 .setMaxDelay(Duration.ofSeconds(5)) // 最大重试延迟 .setRetryConditions(RetryCondition.DEFAULT); // 默认重试条件(如5xx错误、网络异常等) // 构建请求适配器时传入重试处理器 OkHttpRequestAdapter requestAdapter = new OkHttpRequestAdapter( new TokenCredentialAuthenticationProvider(tokenCredential(cred)), new OkHttpClient.Builder() .connectTimeout(Duration.ofSeconds(10)) .readTimeout(Duration.ofSeconds(30)) .build(), null, // 使用默认序列化器 retryHandler ); // 构建GraphServiceClient GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

