During software development, a retry mechanism is used to prevent traffic congestion caused by long wait times of programs. If you do not specify an appropriate timeout period, resource waste or system crashes may occur. If you specify a timeout period shorter than required, connections may be closed before tasks are completed. To prevent such issues, we recommend that you specify an appropriate timeout period to ensure system stability and user experience. This topic describes how to configure timeout periods in Alibaba Cloud SDK V2.0 for Node.js.
Configuration methods
The priority levels of methods that are used to configure a timeout period are in the following descending order: RuntimeOptions > client timeout setting > the default timeout settings.
Use the default timeout settings. The default timeout period for connection requests is 5,000 milliseconds, and the default timeout period for read requests is 10,000 milliseconds.
Configure RuntimeOptions.
const { default: Ecs20140526, ModifySecurityGroupRuleRequest } = require('@alicloud/ecs20140526'); const { Config } = require('@alicloud/openapi-client'); const { RuntimeOptions } = require('@alicloud/tea-util'); async function main() { const config = new Config({ // Obtain the AccessKey ID of the RAM user from an environment variable. accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // Obtain the AccessKey secret of the RAM user from an environment variable. accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, // The region that you want to access. regionId: 'cn-beijing', }); const client = new Ecs20140526(config); const request = new ModifySecurityGroupRuleRequest({ regionId: 'cn-beijing', securityGroupId: 'sg-2zec0dm6qi66XXXXXXXX', securityGroupRuleId: 'sgr-2zec0dm6qi66XXXXXXXX', policy: 'accept', ipProtocol: 'tcp', portRange: '5004/5004', }); // Create a RuntimeOptions instance and configure runtime parameters. const runtime = new RuntimeOptions({ // Configure a timeout period for connection requests. connectTimeout: 10000, // Configure a timeout period for read requests. readTimeout: 10000, }); const resp = await client.modifySecurityGroupRuleWithOptions(request, runtime); console.log(resp.headers); console.log(resp.body); }
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526'; import * as $OpenApi from '@alicloud/openapi-client'; import * as $Util from '@alicloud/tea-util'; export default class Client { static async main(): Promise<void> { const config = new $OpenApi.Config({ // Obtain the AccessKey ID of the RAM user from an environment variable. accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // Obtain the AccessKey secret of the RAM user from an environment variable. accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, // The region that you want to access. regionId: 'cn-beijing', }); const client = new Ecs20140526(config); const request = new $Ecs20140526.ModifySecurityGroupRuleRequest({ regionId: 'cn-beijing', securityGroupId: 'sg-2zec0dm6qi66XXXXXXXX', securityGroupRuleId: 'sgr-2zec0dm6qi66XXXXXXXX', policy: 'accept', ipProtocol: 'tcp', portRange: '5004/5004', }); // Create a RuntimeOptions instance and configure runtime parameters. const runtime = new $Util.RuntimeOptions({ // Configure a timeout period for connection requests. connectTimeout: 10000, // Configure a timeout period for read requests. readTimeout: 10000, }); const resp = await client.modifySecurityGroupRuleWithOptions(request, runtime); console.log(resp.headers); console.log(resp.body); } }
Use the Config class to configure a global timeout period. Then, the all requests initiated from the client instance are subject to the specified timeout period.
const { default: Ecs20140526, ModifySecurityGroupRuleRequest } = require('@alicloud/ecs20140526'); const { Config } = require('@alicloud/openapi-client'); const { RuntimeOptions } = require('@alicloud/tea-util'); async function main() { const config = new Config({ // Obtain the AccessKey ID of the RAM user from an environment variable. accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // Obtain the AccessKey secret of the RAM user from an environment variable. accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, // The region that you want to access. regionId: 'cn-beijing', // Configure a timeout period for connection requests. connectTimeout: 10000, // Configure a timeout period for read requests. readTimeout: 10000, }); const client = new Ecs20140526(config); const request = new ModifySecurityGroupRuleRequest({ regionId: 'cn-beijing', securityGroupId: 'sg-2zec0dm6qi66XXXXXXXX', securityGroupRuleId: 'sgr-2zec0dm6qi66XXXXXXXX', policy: 'accept', ipProtocol: 'tcp', portRange: '5004/5004', }); const runtime = new RuntimeOptions(); const resp = await client.modifySecurityGroupRuleWithOptions(request, runtime); console.log(resp.headers); console.log(resp.body); }
import Ecs20140526, * as $Ecs20140526 from '@alicloud/ecs20140526'; import * as $OpenApi from '@alicloud/openapi-client'; import * as $Util from '@alicloud/tea-util'; export default class Client { static async main(): Promise<void> { const config = new $OpenApi.Config({ // Obtain the AccessKey ID of the RAM user from an environment variable. accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // Obtain the AccessKey secret of the RAM user from an environment variable. accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, // The region that you want to access. regionId: 'cn-beijing', // Configure a timeout period for connection requests. connectTimeout: 10000, // Configure a timeout period for read requests. readTimeout: 10000, }); const client = new Ecs20140526(config); const request = new $Ecs20140526.ModifySecurityGroupRuleRequest({ regionId: 'cn-beijing', securityGroupId: 'sg-2zec0dm6qi66XXXXXXXX', securityGroupRuleId: 'sgr-2zec0dm6qi66XXXXXXXX', policy: 'accept', ipProtocol: 'tcp', portRange: '5004/5004', }); const runtime = new $Util.RuntimeOptions(); const resp = await client.modifySecurityGroupRuleWithOptions(request, runtime); console.log(resp.headers); console.log(resp.body); } }