我目前有一项服务,该服务将消息发布到 SNS 主题,该主题具有带有名称过滤器的订阅,以将其添加到 SQS 队列,最终触发 lambda 函数。
我有一个使用相同的服务来发出消息的用例,但对于一个特定的过滤器名称订阅,仅在 00:00 和 03:00 的三小时期间调用 lambda。在这些时间之外,消息应该备份,然后在第二天的这个时间窗口内重新分发。
这可能吗?需要如何/什么服务才能做到这一点?
您可以使用 UpdateEventSourceMapping API 暂停并稍后恢复队列中的 Lambda 调用。
创建一个新的NightQueue,订阅相关模式。创建 Lambda 处理程序和事件源映射以轮询 NightQueue 中的消息。
接下来创建两个按计划运行的 EventBridge 规则。 OnRule 安排在
00:00
,OffRule 安排在 03:00
。为规则创建targets,指向 Lambda 函数。将目标的事件详细信息输入设置为 OnRule 的 {"action": "on"}
之类的内容。当 Lambda 从 OnRule 接收到带有 "on"
操作的有效负载时,它会通过 UpdateEventSourceMapping
SDK 调用启用 NightQueue 的事件源映射,并设置 Enabled: true
。当由 OffRule 触发时(Lambda 接收 {"action": "off"}
作为事件输入),Lambda 会在 SDK 调用中暂停与 Enabled: false
的事件源映射,消息会累积在 NightQueue 中,直到第二天晚上重新启用映射。
注意:文档说启用/禁用更改最多可能需要 15 分钟才能生效。