Amazon web services AWS SWF在特定S3文件存在时才进行活动等待
我有一个SWF工作流,它有两个活动 第一个活动(A1)只是调用一个服务API,该服务API反过来启动一个应用程序,该应用程序将(最终)上载特定S3存储桶中的文件 第二个活动(A2)下载此文件并评估其中包含的数据 我的问题是,我有一个重复失败和重试,因为S3文件不存在,直到文件上传的应用程序 A1只需启动一个外部应用程序,并在收到“application Successfully Launched”(应用程序成功启动)响应后立即完成,因此让A2等待A1返回的承诺不会让A2等待文件进入S3 我最初的解决方案是捕获由于文件尚未存在而导致的异常,然后在“活动”中重试,但这是一个糟糕的选择,因为“活动”将继续运行,并阻止在同一台计算机上运行的其他工作流执行有用的工作 我认为理想的解决方案是“休眠”活动,并每隔X分钟“唤醒”一次,以查看文件是否存在,并且不会导致其他工作流陷入饥饿状态Amazon web services AWS SWF在特定S3文件存在时才进行活动等待,amazon-web-services,amazon-s3,amazon-swf,Amazon Web Services,Amazon S3,Amazon Swf,我有一个SWF工作流,它有两个活动 第一个活动(A1)只是调用一个服务API,该服务API反过来启动一个应用程序,该应用程序将(最终)上载特定S3存储桶中的文件 第二个活动(A2)下载此文件并评估其中包含的数据 我的问题是,我有一个重复失败和重试,因为S3文件不存在,直到文件上传的应用程序 A1只需启动一个外部应用程序,并在收到“application Successfully Launched”(应用程序成功启动)响应后立即完成,因此让A2等待A1返回的承诺不会让A2等待文件进入S3 我最初的
这可能吗 另一种选择是将两个步骤分开:
当然,如果需要大量文件,可能会增加复杂性,因此Lambda函数需要知道如何处理出现的特定文件。另一种方法是将两个步骤分开:
另一种选择是为该活动提供单独的任务列表和工作人员,并且打开活动的限制要高得多。这样,它不会占用执行其他活动类型的工作人员的容量。如果我从头开始创建整个系统,我会这样做,但遗憾的是,我没有时间和资源这样做。这种方法可能遇到的一个障碍是多个工作流同时运行的情况,这意味着可能会有其他不相关的上传到目标存储桶,从而触发Lambda函数。将所有内容保存在SWF中意味着每个工作流都确切地知道它在bucket中查找的文件。好的。另一种选择是从SWF切换到AWS Step功能。它是AWS Lambda之上的元层。它包括重试和延迟,这听起来非常适合您的情况。如果您已经在使用Lambda,那么这可能是一个相对容易的切换。如果我从头开始创建整个系统,我会这样做,但遗憾的是,我没有时间和资源这样做。这种方法可能遇到的一个障碍是多个工作流同时运行的情况,这意味着可能会有其他不相关的上传到目标存储桶,从而触发Lambda函数。将所有内容保存在SWF中意味着每个工作流都确切地知道它在bucket中查找的文件。好的。另一种选择是从SWF切换到AWS Step功能。它是AWS Lambda之上的元层。它包括重试和延迟,这听起来非常适合您的情况。如果您已经在使用Lambda,那么这可能是一个相对容易的切换。