一旦SQS fifo队列不为空,则触发AWS Lambda



我有一个SQS FIFO队列,我想知道一旦队列不为空,是否有方法触发AWS lambda。例如,如果我的队列为空,并且有一条新消息进入触发器lambda,但如果队列已经包含至少一条消息,并且有新消息进入,则不会触发lambda。有可能吗?

有一个名为ApproximateNumberOfMessagesVisible的Amazon CloudWatch度量,它显示队列中的消息数。该文件称;对于FIFO队列,结果是准确的">

您可以创建一个CloudWatch警报,当消息数量在一段时间内降至零时触发。报警可以向亚马逊SNS主题发送消息。如果您将AWS Lambda函数订阅到此主题,当队列在指定的持续时间内为空时(例如超过5分钟(,它将被触发。只有当报警进入"报警"状态时才会触发,直到报警退出状态,再次进入状态时才会再次触发。

重要信息:配置报警时,转到附加配置,并将丢失数据处理设置为"将丢失的数据视为坏数据(违反阈值(";。这是必需的,因为如果队列为空,则SQS队列将发送度量。(许多队列都是空的,所以这节省了大量的度量存储!(

异常模式。

您可以将Lambda函数的并发性设置为1,这意味着只能同时进行一次调用,然后让Lambda函数启动工作流,然后删除最初导致Lambda被调用的实际SQS事件触发器。这应该可以防止进一步的调用。当您为下一批消息做好准备时,将SQS事件触发器添加回来。

您可以将并发执行限制设置为1,以确保只有1个lambda实例读取队列。但我不确定你是否想这样做。Lambda一次执行最多可以读取10条消息,如果你的队列收到太多传入消息,那么你的消息消耗过程可能会花费太多时间。

最新更新