0

当我调用我的 lambda 函数时,执行需要 1 到 15 秒。如果我通过 C++ SKD 调用该函数,我会超时。这些超时似乎在几秒钟后发生(这只是人为判断,我实际上并没有计时)。

问题:我如何告诉 SDK 等待慢 lambdas 返回而不是超时?

不起作用的事情:

JS SDK 中,您可以在 HTTP 设置中进行更改。这在 C++ SDK HTTPOptions中没有这样的选项。

给 lambda 客户端一个更大的 connectionTimeoutMS(套接字超时)的配置并没有帮助。此外,客户端的 httpRequestTimeoutMs 默认设置为 0,这意味着它将永远等待。

我正在使用同步请求,它似乎没有额外的超时选项。

附加信息:

我正在使用单个客户端并行运行多个请求。

如果我使用异步请求,也会发生错误。

有关的:

如何解决使用 AWS 开发工具包调用 Lambda 函数时的重试和超时问题?

4

1 回答 1

0

同样的事情曾经让我很难过。您可能已经找到了解决方案,但对其他人来说,这就是我所做的。有客户端配置可以编辑默认连接时间。发送请求的默认连接时间为 1 秒,接收请求的默认连接时间为 3 秒,如果您在此时间段内完成请求,则更好,否则将调用根据 lambda 设置的重试。这两者的行为在它们各自的头文件中得到了很好的解释。 您还可以使用 lambda 的内存大小来提高 lambda 的内存,从而降低相同的响应时间。

             Aws::Client::ClientConfiguration m_ClientConfig;
             m_ClientConfig.requestTimeoutMs = 300000; // i.e. 300 seconds
             m_ClientConfig.connectTimeoutMs = 300000; 


            /**
             * Socket read timeouts for HTTP clients on Windows. Default 3000 ms. This should be more than adequate for most services. However, if you are transfering large amounts of data
             * or are worried about higher latencies, you should set to something that makes more sense for your use case.
             * For Curl, it's the low speed time, which contains the time in number milliseconds that transfer speed should be below "lowSpeedLimit" for the library to consider it too slow and abort.
             */
            long requestTimeoutMs;
            /**
             * Socket connect timeout. Default 1000 ms. Unless you are very far away from your the data center you are talking to. 1000ms is more than sufficient.
             */
            long connectTimeoutMs;
于 2020-09-03T16:57:53.403 回答