2016-09-11 27 views
1

我對AWS中的SWF相當陌生。 我正在創建一個工作流程,並且很難弄清楚如何識別剛剛完成的活動的名稱。決策者需要知道這一點,以便確定下一個要安排的活動。在AWS SWF中查找已完成活動的ActivityId?

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和名稱是很典型的(並且假設這是報告完成)?這對我來說並不合適。

在文檔(http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-dev-deciders.html#swf-dg-coordination-logic)中,他們討論瞭如何定義協調邏輯,這似乎意識到以前完成的活動名稱的名稱。

這實際上是如何在實踐中完成的?

回答

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。

+0

感謝。我在一個小時前遇到了同樣的問題,所以很高興看到您找到了解決方案。這是一個奇怪的設計決定,不是嗎?我掌握了這個邏輯(也就是說,如果你的決策者將大型任務分成批次),但在大多數情況下,你肯定會想從一個任務轉換到另一個任務。 –

+2

同意。如果數據可以在其他地方找到(例如:如果在預定事件中可用,則不包括演員姓名),但是它絕對不是非常方便。 – Joe