如何使用 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.htmlhttp://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可执行文件?