2017-12-01 17 views
1

ワークフローの実行を開始する必要がありますが、次の次のイベントが実行されるのを待つ必要があります。イベントは、サービスがクライアントから受け取るAPI呼び出しに基づいて生成されます。イベントセマンティクスは、ステートマシンに基づいています。これがjavaでどのように実装できるのか教えてください。参考のためにサンプルコードを提供してください。ワークフローの実行でイベントが受信されるまで待機し、さらに実行を続ける必要があるようにする方法

答えて

0

AWS Flow Frameworkを使用している場合、外部イベントはSignal APIを使用してワークフローインスタンスに通知する必要があります。

@Workflow 
@WorkflowRegistrationOptions(
    defaultExecutionStartToCloseTimeoutSeconds = 60, 
    defaultTaskStartToCloseTimeoutSeconds = 10) 
public interface MyWorkflow 
{ 
    @Execute(version = "1.0") 
    void startMyWF(int a, String b); 

    @Signal 
    void signal1(int a, int b, String c); 
} 

public class MyWFImpl implements MyWorkflow 
{ 
    MyActivitiesClient client = new MyActivitiesClientImpl(); 
    @Override 
    public void startMyWF(int a, String b){ 
    Promise<Integer> result = client.activity1(); 
    client.activity2(result); 
    } 
    @Override 
    public void signal1(int a, int b, String c){ 
    //Process signal 
     client.activity2(a + b); 
    } 
} 

http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/features.workflow.htmlワークフローインタフェースを記述する方法について説明:ワークフローの中にそれはのようなハンドラメソッドになります。

http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/workflowimpl.htmlは、ワークフローの実装方法を説明しています。

http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/clients.htmlは、外部クライアントを使用して信号を送信する方法を説明しています。

+0

Decidersを使用してすべてのステートマシンロジックを実装する必要はありません。 [AWSリンク](http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-dev-deciders.html)に記載されているif elseシナリオのようなものですか? –

+0

または正確にどのようにJavaでこのロジックを実装することができますか? IF lastEvent = "StartWorkflowInstance" addToDecisions ScheduleVerifyOrderActivity ELSIF lastEvent = "CompleteVerifyOrderActivity" addToDecisions ScheduleChargeCreditCardActivity ELSIF lastEvent = "CompleteChargeCreditCardActivity" addToDecisions ScheduleCompleteShipOrderActivity ELSIF lastEvent = "CompleteShipOrderActivity" addToDecisions ScheduleRecordOrderCompletion ELSIF lastEvent =「CompleteRecordOrderCompletion " addToDecisions CloseWorkflow ENDIF –

+0

、しないでください。フローフレームワークを使用するだけです。それは非常に扱いにくいすべての低レベルの詳細を処理します。 –