在網路不穩定或服務響應較慢的情況下,合理設定逾時時間能夠有效防止請求長時間掛起,以及避免因服務不可用而導致的長時間等待,提升系統穩定性和響應效率。本文為您介紹在使用Java(非同步)SDK過程中如何配置逾時時間。
配置方式
說明
逾時時間配置優先順序為:RequestConfiguration配置 -> ClientOverrideConfiguration配置 -> HttpClient配置 -> 預設值,優先順序依次降低。
方式一:使用預設配置
預設連線逾時時間為10000毫秒,響應逾時時間為20000毫秒。
方式二:通過RequestConfiguration配置
darabonba.core.RequestConfiguration requestConfiguration = darabonba.core.RequestConfiguration.create()
.setConnectTimeout(java.time.Duration.ofMillis(10000))
.setResponseTimeout(java.time.Duration.ofMillis(15000));配置完成後,可以通過OpenAPI請求對象設定RequestConfiguration。例如,為SendSms配置連線逾時時間和響應逾時時間:
darabonba.core.RequestConfiguration requestConfiguration = darabonba.core.RequestConfiguration.create()
.setConnectTimeout(java.time.Duration.ofMillis(10000))
.setResponseTimeout(java.time.Duration.ofMillis(15000));
// SendSmsRequest為SendSms的請求對象,逾時配置只對當前請求生效
SendSmsRequest sendSmsRequest = SendSmsRequest.builder()
.requestConfiguration(requestConfiguration)
.build();方式三:通過ClientOverrideConfiguration配置
darabonba.core.client.ClientOverrideConfiguration clientOverrideConfiguration = darabonba.core.client.ClientOverrideConfiguration.create()
.setConnectTimeout(Duration.ofMillis(10000))
.setResponseTimeout(Duration.ofMillis(15000));配置完成後,可以通過AsyncClient配置ClientOverrideConfiguration。
ClientOverrideConfiguration clientOverrideConfiguration = ClientOverrideConfiguration.create()
.setConnectTimeout(Duration.ofMillis(10000))
.setResponseTimeout(Duration.ofMillis(15000));
// 逾時配置對所有通過該AsyncClient調用的請求都生效
AsyncClient client = AsyncClient.builder()
.credentialsProvider(credentialProvider) // 本樣本省略credentialProvider實現過程...
.overrideConfiguration(clientOverrideConfiguration)
.build();方式四:通過HttpClient配置
// HttpClient Configuration
HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofMillis(10000))
.responseTimeout(Duration.ofMillis(20000))
.build();配置完成後,可以通過AsyncClient配置HttpClient。
// HttpClient Configuration
HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofMillis(10000))
.responseTimeout(Duration.ofMillis(20000))
.build();
// 逾時配置對所有通過該AsyncClient調用的請求都生效
AsyncClient client = AsyncClient.builder()
.httpClient(httpClient)
.credentialsProvider(credentialProvider) // 本樣本省略credentialProvider實現過程...
.build();