2016-09-11 4 views
1

AWSのSWFはかなり新しいです。 私はワークフローを作成しており、完了したばかりのアクティビティの名前を特定する方法を理解するのに苦労しています。決定者は、次にスケジュールする活動を決定できるようにこれを知る必要があります。AWS SWFで完了したアクティビティのアクティビティIDを探しますか?

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)にはこの情報が含まれています。

完了したばかりのアクティビティのアクティビティIDと名前を特定するとき、イベント履歴に戻って、スケジュールされた最後のアクティビティの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

感謝を。 1時間ほど前と同じ問題がありましたので、解決策が見つかったのは良いことです。それは奇妙なデザインの決定のビットですね。この背後にあるロジック(つまり、デシリアンが大量のタスクをバッチに分割している場合)のロジックが得られますが、ほとんどの場合、必ずあるタスクから別のタスクに移行する必要があります。 –

+2

合意。データが他の場所で見つかった場合(つまり、スケジュールされたイベントで利用可能な場合は、完了したイベントにアクター名を含めないでください)、新しいプロパティをオブジェクトに追加しないという点もありますが、間違いなく便利です。 – Joe

関連する問題