aws-swf / fluent
围绕 aws-sdk-php 的粘合代码,以允许流畅的工作流程定义
dev-master
2014-03-22 13:31 UTC
Requires
- aws/aws-sdk-php: 2.*
This package is not auto-updated.
Last update: 2024-09-24 05:28:47 UTC
README
围绕 aws-sdk-php 简单工作流 API (Aws\Swf) 的粘合代码,以允许流畅的工作流程定义。欢迎反馈。
功能
- 流畅的工作流定义
- 透明的基本注册:域 / 工作流类型 / 活动类型
- 对活动、决策任务和子工作流的基本支持。
待实现/未完成
- 定时器支持
- 信号支持
- 活动/工作流超时支持
- ContinueAsNew 工作流支持
- 工作流/活动取消支持
- 改进的域/工作流/活动注册
AWS 简单工作流文档
- http://aws.amazon.com/swf/
- http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-welcome.html
- http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dev-workflow-exec-lifecycle.html
入门
- 注册 AWS - http://docs.aws.amazon.com/aws-sdk-php-2/guide/latest/awssignup.html
- 安装 aws-swf/fluent - 使用 Composer 是安装此库的推荐方式。 aws-swf/fluent 通过 Packagist 提供的
aws-swf/fluent包可获得。 - 按照下面 QuickSimpleDomain 的方式添加您的 workflows 定义
- 为决策和活动工作者创建长运行脚本
- 在您的 php 应用程序中添加 startWorkflowExecution 调用
快速示例
带有决策任务的三个步骤工作流
class QuickSimpleDomain extends Aws\Swf\Fluent\Domain { /** * Simple workflow domain configuration. * * Mandatory swf objects to be defined here: * - swf domain name using setDomainName method * - swf workflows using addWorkflow method * - actions using workflow's 'to'/registerTask method */ protected function configure() { // set swf client $domain->setSwfClient(Aws\Swf\SwfClient::factory(array( 'key' => 'AWS key', 'secret' => 'AWS secret key', 'region' => 'us-east-1' ))); // set domain name $this->setDomainName('threeStepsZenDomain'); /** * threeStepsZen workflow : * - on start, execute stepOne * - if stepOne failed, execute stepFour. See evaluateStepOneResult method * - if stepOne succeeded, execute stepTwo * - if stepTwo succeeded, execute stepThree * * On any unhandled exception, workflow execution will terminate * with FAIL_WORKFLOW_EXECUTION decision. * Decision tasks can catch/handle previous activity fail/success. */ $this->addWorkflow('threeStepsZen') ->to('activity://stepOne') ->to('decision://evaluateStepOneResult') ->to('activity://stepTwo') ->to('activity://stepThree') ->registerTask('activity://stepFour', array('comment' => 'Optional step 4')); $this->addWorkflow('secondWorkflow') ->to('activity://stepBeforeChildWorkflow') ->to('childWorkflow://threeStepsZen') ->to('activity://stepAfterChildWorkflow'); } public function stepOne($context) { /* do something on activity workers.*/ } public function evaluateStepOneResult($context, $decisionHint) { $lastEvent = $decisionHint->getLastEvent(); if ($lastEvent['eventType'] == Aws\Swf\Enum\EventType::ACTIVITY_TASK_FAILED) { $decisionHint->setItem($this->getActivity('stepFour')); $decisionHint->setDecisionType(Aws\Swf\Enum\DecisionType::SCHEDULE_ACTIVITY_TASK); } } public function stepTwo($context) { /* do something on activity workers.*/ } public function stepThree($context) { /* do something on activity workers.*/ } public function stepFour($context) { /* do something on activity workers.*/ } public function stepBeforeChildWorkflow($context) { /* do something on activity workers.*/ } public function stepAfterChildWorkflow($context) { /* do something on activity workers.*/ } }
decision-worker.php
$domain = new QuickSimpleDomain(); $domain->pollForDecisionTask();
activity-worker.php
$domain = new QuickSimpleDomain(); $domain->pollForActivityTask();
启动工作流执行
$domain = new QuickSimpleDomain(); $domain->startWorkflowExecution('threeStepsZen', 5);
更多示例
请参阅示例文件夹以获取更多详细信息