如何使用 PHP 集成 AWS SWF,以便可以从用户界面进行管理?

Posted

技术标签:

【中文标题】如何使用 PHP 集成 AWS SWF,以便可以从用户界面进行管理?【英文标题】:How to integrate AWS SWF using PHP so it can be managed from a user interface? 【发布时间】:2015-09-09 12:28:50 【问题描述】:

我正在使用 LAMP 构建一个 CMS,它允许管理员将 MP4 上传到 Amazon S3 存储桶,使用 Elastic Transcoder 对其进行多次转换,并更新本地数据库以便可以使用 Cloud Front 进行交付。

现在每个步骤都按预期工作,一个简单的 SWF 工作流将所有步骤连接起来(只要我从命令行启动启动器、决策器和活动工作器,正如我在所有示例中看到的那样)。

但是,我正在努力将各个部分与用户界面连接在一起:

在用户开始上传时使用pcntl_exec 启动工作流并启动决策者和活动工作者是正确的方法吗?有其他选择吗? 活动工作者和决策者完成每项任务的执行,因此必须再次启动他们以进行下一个决策或活动,工作流启动者是否会负责每次启动工作者,还是我错过了什么? 如果1.2. 正朝着正确的方向发展,在UI 中实现反馈应该很简单,使用AJAX 调用来检查数据库中记录的状态,每个步骤都会更新记录.否则,有什么更好的方法吗?

编辑:有人可能会觉得这很有用,第 2 点:

http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-develop-activity.html

对活动工作者进行编程,以在完成手头的任务后轮询另一个活动任务。这会创建一个循环,活动工作者在该循环中不断轮询并完成任务。

不过,在决策者安排活动任务之前,这些轮询会超时且没有任务,您的工作人员只会继续轮询。

http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-dev-deciders.html

如果没有可用的决策任务,Amazon SWF 会将连接保持打开状态长达 60 秒,并在任务可用时立即返回。如果没有任务可用,Amazon SWF 会返回一个空响应 [...] 确保对您的决策程序进行编程,以便在收到空响应时轮询另一个任务。

【问题讨论】:

【参考方案1】:

我建议永久独立于 Web 服务器进程运行活动和决策者工作人员。您可以将它们作为守护程序启动。他们应该循环轮询新任务并根据您的逻辑处理它们。所以任务执行完成后就不需要再启动了。

工作流实例从网络服务器进程启动,因为启动它们是一个相对较快的调用,不会等待工作流执行完成。

在 UI 中实现反馈通常是通过网络服务器代码轮询特殊活动类型(如“UIFeedback”)来完成的。当工作流需要通知 UI 某些事情时,它会安排这个活动,该活动被传递到网络服务器,网络服务器将活动输入数据转发到 AJAX 代码。

【讨论】:

以上是关于如何使用 PHP 集成 AWS SWF,以便可以从用户界面进行管理?的主要内容,如果未能解决你的问题,请参考以下文章