mic*_*ski 3 amazon-web-services aws-lambda
我必须实现需要在特定日期延迟向用户发送消息一次的功能,该日期可以是任何时间 - 从明天到几个月后。
到目前为止,我们所有的代码都是作为 lambda 函数实现的。
我正在考虑如何实现这一点的三种选择:
在 DynamoDB 中创建一个条目,哈希键为日期,范围键为唯一 ID。安排 lambda 每天运行一次,并获取当天安排的所有条目/任务,为每个条目发送一条消息。
使用 SDK 创建带有指示单次执行的 cron 表达式的 cloudwatch 事件规则,并使其调用带有用户/消息 ID 的 lambda 函数(目标)。lambda 将按照特定的时间表调用,并传递特定的用户/消息。
创建一个步骤函数实例并将其配置为睡眠并使用逻辑调用步骤,以便在适当的时刻到来时发送消息。
您对实现此类业务需求的最佳实践有什么建议吗?也许是一种完全不同的方法?
这很大程度上取决于规模。如果您在任何时间点都只安排了一些活动,那么我会使用 CloudWatch 事件方法。它的开销非常低,并且不涉及运行代码并且不执行任何操作。
如果您期望有很多计划,那么 DynamoDB 方法很可能是最好的方法。按固定计划运行 lambda,查看哪些记录尚未运行,以及哪些记录已经过去/等于当前时间。在此模型中,您需要删除已处理的记录(或以某种方式标记它们),以便不再处理它们。不要依赖以特定时间间隔运行的计划并检查上次时间和当前时间之间的记录,除非您正在记录上次时间(即不要假设您在一分钟前运行,因为您安排它在每个时间运行)分钟)。
如果时间不太远的话,步进函数可以起作用。您可以在步骤中添加延迟,使其只是等待。步骤函数中的延迟只是延迟,而不是预定时间,因此您必须自己计算出延迟,并希望它的触发时间足够接近您期望的时间。对于中低音量来说,这不是一个糟糕的选择。
编辑:步骤功能现在包括等待状态wait_until的选项。对于您所描述的内容来说,这是一个非常好的选择。
| 归档时间: |
|
| 查看次数: |
2309 次 |
| 最近记录: |