我可以在SWF管理控制台中看到,工作流有大约18个事件,第16个事件是我的ActivityTaskCompleted
事件,但每当我查看决定时,我只能到达第15个事件,所以我永远不会打电话具有决策类型RespondDecisionTaskCompleted
的{{1}}因此我的工作流始终处于活动状态,直到超时。
我正在使用的流程来自我之前发现的PHP SWF git,但遗憾的是我不再拥有它的链接了。
CompleteWorkflowExecution
HistoryEventIterator的位置如此
$response = $this->swf->PollForDecisionTask($opts);
$decision_list = self::_decide(new HistoryEventIterator($this->swf, $opts, $response), $this->swf);
if(count($decision_list) > 0)
{
//Some decisions
}
else
{
//No decisions
}
我省略了在这种情况下不会调用的public function __construct(Aws\Swf\SwfClient $swf_client, $original_request, $original_response) {
$this->swf = $swf_client;
$this->events = array();
$this->event_index = 0;
$this->next_page_token = null;
$this->original_poll_request = $original_request;
$this->_process_poll_response($original_response);
$this->workflow_id = $original_response->get('workflowExecution')['workflowId'];
$this->run_id = $original_response->get('workflowExecution')['runId'];
}
protected function _process_poll_response($response) {
if ($response->hasKey("nextPageToken")) {
$this->next_page_token = (string) $response->get("nextPageToken");
} else {
$this->next_page_token = null;
}
$next_events = $response->get("events");
$next_events_object = new ArrayObject($next_events);
$next_events_copy = $next_events_object->getArrayCopy();
$this->events = array_merge($this->events, $next_events);
}
错误检查和函数。
我输出HistoryEventIterator
的{{1}},发现它总是next_page_token
。
来自活动的HistoryEventIterator
是否应该达到决策者?如果是这样,我的原因可能不是什么?当然,它不会在15个事件之后进行分页,而只是不能正确分页。
我可以验证域,活动任务列表和决策器任务列表是否准确,因为工作流程显示在SWF管理控制台中,决策和活动(活动甚至具有已完成状态)也是如此错误检查和Try / Catch块,在任何情况下都没有例外。