gpt4 book ai didi

node.js - 我应该使用哪个亚马逊服务来实现基于时间的队列调度程序(无服务器应用程序)?

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:29 25 4
gpt4 key购买 nike

用户提交一个 csv 文件,其中包含带有消息的时间(间隔)。我想在消息聊天 API 提到的时间提交该消息。我使用 DynamoDB 来存储消息,并使用一个 lambda 函数从 DynamoDB 读取消息,并一次使用 setTimeout 函数在聊天中发布消息。我正在使用 Node.js 来实现该功能。我还创建了一个亚马逊 API 来触发该 lambda 函数。但这种方法并不奏效。任何人都可以建议我应该使用哪一种其他服务来做同样的事情吗?有亚马逊队列服务吗?

最佳答案

根据您问题的上下文,我的理解是您基本上需要创建一个 future 计时器。一个可以在未来某个时间通知您一些元数据以采取行动的系统。

如果是这种情况,我认为您可以使用以下解决方案来实现您的目标:

<小时/>

先决条件:我假设您已经在使用 Dynamo DB(又名 DDB)作为主存储。因此,所有 CSV 数据都保留在 dynamo 中,并且您使用 dynamo 流读取插入和更新的记录以触发 lambda 函数(我们将此 lambda 函数称为 Proxy_Lambda)。

创建另一个 lambda 函数来处理记录并向您的聊天系统发送消息(我们将此 lambda 函数称为 Processor_Lambda)

<小时/>

选项 1:AWS SQS

  1. Proxy_Lambda 从 DDB 流中读取记录,并根据记录中存在的 future 时间戳属性,将消息发布到 AWS SQS queue with initial visibility timeout equals to the timestamp 。示例:Link 。请记住,在可见性超时之前,任何消费者都看不到这些消息。
  2. Add a trigger for Processor_Lambda to start polling from this SQS queue .
  3. 一旦消息在队列中可见(初始超时后),Processor_Lambda 就会使用该消息并发送聊天事件。

结果:您将能够使用 SQS 可见性超时功能创建一个 future 计时器。这里的缺点是,在消息可见性超时之前,您将无法查看正在进行的 SQS 消息内容。

注意:最大可见性超时可以设置为 12 小时。因此,如果您的用例需要计时器超过 12 小时,您需要在 Processor_Lambda 中添加代码逻辑,以使用新的可见性超时将该消息发送回队列。

<小时/>

选项 2:AWS Step 函数(我的首选方法;))

  1. 将状态机放入 AWS Step function to generate task timers (我们称之为Timer_Function)。这些任务定时器将在等待状态之间不断循环,直到定时器到期。计时器窗口将作为此步骤函数的输入提供。
  2. 链接Timer_Function以在任务计时器到期时触发Processor_Lambda。基本上,这将是计时器步骤之后的下一步。
  3. Proxy_LambdaTimer_Function连接,即Proxy_Lambda将从DDB流中读取记录并以消息间隔调用Timer_Function属性显示 Dynamo DB 记录和必要的负载。

Result:Timer_Function,持续循环直到时间窗口(消息间隔)到期。这反过来又为您提供了一种在将来触发 Proxy_Lambda 的机制(即计时器窗口)

<小时/>

话虽如此,现在我将让您根据用例和业务需求选择正确的解决方案。

<小时/>

关于node.js - 我应该使用哪个亚马逊服务来实现基于时间的队列调度程序(无服务器应用程序)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51542539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com