超时机制

更新时间:

在软件开发中,配置超时时间是为了防止程序因等待响应而长时间陷入阻塞状态。如果未进行配置,可能会导致资源浪费甚至系统崩溃;而若设置的超时时间过短,则可能在任务尚未完成时便中断,从而影响正常功能。因此,合理设置超时时间能够提升系统的稳定性与用户体验。本文将介绍V2.0 Node.js SDK的超时配置方法。

超时配置方式

说明

超时机制优先级为:RuntimeOptions配置->Client配置 -> 默认配置,优先级依次降低。

  • 使用默认配置。默认连接超时为5000毫秒,读超时为10000毫秒。

  • 通过运行时参数(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({
            // 从环境变量中获取RAM用户的AccessKey ID
            accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
            // 从环境变量中获取RAM用户的AccessKey Secret
            accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
            // 访问的地域
            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',
        });
        // 创建RuntimeOptions实例并设置运行参数。
        const runtime = new RuntimeOptions({
            // 设置连接超时时间
            connectTimeout: 10000,
            // 设置读取超时时间
            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({
                // 从环境变量中获取RAM用户的AccessKey ID
                accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
                // 从环境变量中获取RAM用户的AccessKey Secret
                accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
                // 访问的地域
                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',
            });
            // 创建RuntimeOptions实例并设置运行参数。
            const runtime = new $Util.RuntimeOptions({
                // 设置连接超时时间
                connectTimeout: 10000,
                // 设置读取超时时间
                readTimeout: 10000,
            });
            const resp = await client.modifySecurityGroupRuleWithOptions(request, runtime);
            console.log(resp.headers);
            console.log(resp.body);
        }
    }
  • 通过ConfigClient配置全局超时时间,完成配置后,该Client发起的所有请求均适用此超时时间设置。

    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({
            // 从环境变量中获取RAM用户的AccessKey ID
            accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
            // 从环境变量中获取RAM用户的AccessKey Secret
            accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
            // 访问的地域
            regionId: 'cn-beijing',
            // 设置连接超时时间
            connectTimeout: 10000,
            // 设置读取超时时间
            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({
                // 从环境变量中获取RAM用户的AccessKey ID
                accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
                // 从环境变量中获取RAM用户的AccessKey Secret
                accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
                // 访问的地域
                regionId: 'cn-beijing',
                // 设置连接超时时间
                connectTimeout: 10000,
                // 设置读取超时时间
                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);
        }
    }