【问题标题】:How to ensure that Workflow execution should waits till an event is received and then proceeds with further execution如何确保工作流执行应该等到收到事件然后继续执行
【发布时间】:2018-05-15 13:18:50
【问题描述】:

我要求工作流应该在哪里开始执行,但它应该等待下一个后续事件来执行。事件是根据服务从客户端接收到的 API 调用生成的。事件语义基于状态机。请让我知道如何在 java 中实现这一点。请提供任何示例代码以供参考。

【问题讨论】:

    标签: amazon-swf


    【解决方案1】:

    如果您使用 AWS Flow Framework,则外部事件应使用 Signal API 来通知工作流实例。在工作流中,它变成了一个处理方法,例如:

     @Workflow
     @WorkflowRegistrationOptions(
        defaultExecutionStartToCloseTimeoutSeconds = 60,
        defaultTaskStartToCloseTimeoutSeconds = 10)
     public interface MyWorkflow
     {
        @Execute(version = "1.0")
        void startMyWF();
    
        @Signal
        void signal1();
     }
    
     public class MyWFImpl implements MyWorkflow
     {
       MyActivitiesClient client = new MyActivitiesClientImpl();
       // Used to block the workflow until a signal is received.
       Settable<Void> signal1Called = new Settable<Void>();
    
       @Override
       public void startMyWF(){
         Promise<Integer> result = client.activity1();
         // Continues when both result and signal1 are ready.
         client.activity2(result, signal1);
       }
       @Override
       public void signal1() {
         //Process signal
          signal1.set(null);
       }
     }
    

    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 描述了如何使用外部客户端发送信号。

    【讨论】:

    • 我不需要使用决策者来实现所有状态机逻辑。像 [AWS 链接] (docs.aws.amazon.com/amazonswf/latest/developerguide/…) 中给出的 if else 场景?
    • 或者更确切地说,如何在 Java 中实现这个逻辑? IF lastEvent = "StartWorkflowInstance" addToDecisions ScheduleVerifyOrderActivity ELSIF lastEvent = "CompleteVerifyOrderActivity" addToDecisions ScheduleChargeCreditCardActivity ELSIF lastEvent = "CompleteChargeCreditCardActivity" addToDecisions ScheduleCompleteShipOrderActivity ELSIF lastEvent = "CompleteShipOrderActivity" addToDecisions ScheduleRecordOrderCompletion ELSIF lastEvent = "CompleteRecordOrderCompletion"
    • 请不要这样做。只需使用流框架。它负责处理所有非常麻烦的低级细节。见docs.aws.amazon.com/amazonswf/latest/awsflowguide/welcome.html
    • 我浏览了文档,但对如何实现我的用例感到困惑。你能提供你的电子邮件ID吗?我会告诉你确切的用例。 ravikanth828@gmail.com 是我的电子邮件 ID
    猜你喜欢
    • 2018-05-19
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 2018-06-21
    • 2021-11-01
    相关资源
    最近更新 更多