如何使用 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,以便可以从用户界面进行管理?的主要内容,如果未能解决你的问题,请参考以下文章

如何将来自 AWS Mobile Hub 示例项目的推送服务集成到现有的 android 项目中?

AWS SWF和SQS关系是否与Celery和RabbitMQ类似?

通过 PHP 检索 GET 变量,在同一脚本上发送到 SWF?

如何设置PhpStorm以便Docker Compose Interpreter可以使用PHP可执行文件?

自动从 ActionScript 源生成 SWF,以便从 JavaScript 调用

如何在 swf 中发布 php 变量?