Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 为什么异步调用lambda函数_Amazon Web Services_Aws Lambda_Amazon Sqs - Fatal编程技术网

Amazon web services 为什么异步调用lambda函数

Amazon web services 为什么异步调用lambda函数,amazon-web-services,aws-lambda,amazon-sqs,Amazon Web Services,Aws Lambda,Amazon Sqs,我有一个lambda函数,它由SQS事件触发。lambda被设置为以批次x编号和批次窗口为y秒的方式使用消息,即batch Size=x和batch window=y。但是,需要注意的是,lambda是通过Batch Size=x异步触发的。据我所知,batchwindow=y意味着lambda将在开始执行之前轮询消息y秒。请注意。用于控制调用lambda的次数,方法是让lambda轮询器在调用lambda之前累积消息,主要是为了节省成本 BatchSize—调用lambda之前累计的最大事件数

我有一个lambda函数,它由SQS事件触发。lambda被设置为以批次x编号和批次窗口为y秒的方式使用消息,即
batch Size=x
batch window=y
。但是,需要注意的是,lambda是通过
Batch Size=x
异步触发的。据我所知,
batchwindow=y
意味着lambda将在开始执行之前轮询消息
y
秒。请注意。

用于控制调用lambda的次数,方法是让lambda轮询器在调用lambda之前累积消息,主要是为了节省成本

BatchSize—调用lambda之前累计的最大事件数。 BathWindow-(最近添加的内容)在调用lambda之前累计事件的最大时间量。(最多5分钟)

在没有BatchWindow的情况下,一旦事件可用(超过SQS上的可见性超时),它们将被发送到lambda,而不管batchSize是否达到。但现在它会一直等到BatchWindow,而不考虑batchSize

但是,无论是否设置了BatchWindow,一次运行的lambda实例的数量永远不会为1。SQS poller从最多5个lambda线程开始,可以扩展到1000个线程

强制lambda运行单线程的唯一方法是将保留并发设置为1。这将导致节流,并最终成功

从:

将SQS队列配置为事件源时,消息 Lambda可用于处理,其最大并发性为 五个。最佳情况下,带有Amazon SQS触发器的Lambda函数可以扩展 每分钟最多可增加60个实例,最多可并发1000个 调用

这是您在expected中的问题/评论中解释的行为


浴缸尺寸:5k,批量窗口:5分钟。如果我们在可视性超时5分钟后立即向SQS触发20K条消息,将立即启动4个线程来处理这些20K条消息。

那么,如果lambda在批处理窗口之前达到所需的批处理大小,是否会调用lambda?我的理解正确吗?@Prashanna当它达到批处理大小时会调用它,但我看到的问题是,它以相同的批处理大小异步执行。因此,例如,如果有20k条消息,且批处理大小为5k,则it将以5k的批处理大小启动4次同时执行。非常感谢!“强制lambda运行单线程的唯一方法是将保留并发设置为1”解决了这个问题。