在AWS SWF中查找已完成活动的ActivityId?

时间:2016-09-11 03:31:35

标签: amazon-web-services

我在AWS中对SWF很新。 我正在创建一个工作流程,并且很难确定如何识别刚刚完成的活动的名称。决策者需要知道这一点,以便它可以确定下一个要安排的活动。

ActivityTaskCompletedEventAttributes(http://docs.aws.amazon.com/amazonswf/latest/apireference/API_ActivityTaskCompletedEventAttributes.html)不包含有关刚刚完成的活动的ID或名称的信息。

另一方面,ActivityTaskScheduleEventAttributes(http://docs.aws.amazon.com/amazonswf/latest/apireference/API_ActivityTaskScheduledEventAttributes.html)确实包含此信息。

在识别刚刚报告完成的活动的ActivityId和名称时,通常只需返回事件历史记录并获取已安排的最后一个活动的ID和名称(并假设是' s一个报告完成的人?)这对我来说似乎不对。

在文档(http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-dev-deciders.html#swf-dg-coordination-logic)中,他们谈到了以一种似乎已经意识到之前已完成的活动名称的名称来定义协调逻辑。

这在实践中如何实现?

1 个答案:

答案 0 :(得分:1)

经过一段时间的研究后,我得出的结论是,处理此问题的最佳方法基本上是通过爬回事件历史记录列表来查找任务的安排时间。预定的活动包含我正在寻找的信息。

步骤可能如下所示:

1)确保您已将所有历史事件页面加载到nextPageToken描述中:http://docs.aws.amazon.com/amazonswf/latest/apireference/API_PollForDecisionTask.html#API_PollForDecisionTask_RequestSyntax

2)ActivityTaskCompleted与已完成活动的名称之间的链接如下:

ActivityTaskCompletedEventAttributes.ScheduledEventId => ActivityTaskScheduledEventAttributes.ActivityType.Name

在C#中,这可能类似于

var name = eventHistory
                .Find(e => e.EventId == mostRecentEvent
                                            .ActivityTaskCompletedEventAttributes
                                            .ScheduledEventId)
                .ActivityTaskScheduledEventAttributes
                .ActivityType
                .Name

其中eventHistory是SWF提供给决策者的历史事件列表,而mostRecentEvent是您感兴趣的ActivityTaskScheduledEvent。