【问题标题】:AWS SWF - Return result of workflowAWS SWF - 工作流的返回结果
【发布时间】:2014-06-09 15:46:25
【问题描述】:

我已经开始使用简单的工作流服务学习亚马逊网络服务。我已经完成了用于开发的 eclipse 设置,并成功完成了来自here 的 hello world 工作流应用程序。

为了在 Web 平台上使用相同的应用程序,我尝试创建 AWS Web 项目并从 servlet 调用工作流方法。 servlet 运行没有任何错误,并且输出打印到控制台。如果我希望工作流返回打印在控制台上的字符串消息,需要进行哪些更改?

【问题讨论】:

    标签: java servlets amazon-web-services amazon-swf


    【解决方案1】:

    在亚马逊 AWS 论坛上发布了同样的问题。他们没有关于 AWS Simple Workflow Framework 的明确文档。可以查看here

    AWS Workflow 执行异步,因此生成的代码返回类型为何无效。如果你愿意,那么你可以使用

    GetWorkflowExecutionHistoryRequest historyRequest = new GetWorkflowExecutionHistoryRequest();
    historyRequest.setDomain(domain);
    historyRequest.setExecution(workflowExecution);
    historyRequest.setReverseOrder(true);
    History workflowExecutionHistory = service.getWorkflowExecutionHistory(historyRequest);
    

    如果您想要结果,那么只需创建一个线程,当结果填充到方法中时,您将获得数据。但这不是连续运行线程的好方法。

    【讨论】:

      【解决方案2】:

      您的用例是什么?返回值的工作流通常是一个坏主意(除非它是子工作流),因为工作流是异步的并且长时间运行。启动它的控制台应用程序应该能够在不影响工作流执行的情况下退出。

      【讨论】:

        【解决方案3】:

        从工作流返回值需要执行的步骤是:

        • 让工作流声明它的返回值是一个包含您要返回的类型的 Promise。
        • 让工作流返回带有您想要返回的值的 Promise(或 Settable)。
        • 让客户端使用 DescribeWorkflowExecutionRequest API 检查工作流是否已关闭并完成
        • 让客户端使用 GetWorkflowExecutionHistoryRequest API 从工作流历史记录中获取结果
        • 使用工作流的 DataConverter 将结果反序列化为所需的结果对象。

        以下是应用于 AWS 提供的 HelloWorld 示例的所有这些更改的示例。下面的 HelloWorld 示例从工作流返回一个值并在客户端打印该值。

        https://github.com/aquesnel/aws-sdk-java/commit/87a80b5946f02283faecaa7436828ecd1c43921c

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-17
          • 2015-11-28
          • 2018-03-20
          • 2019-06-25
          • 2021-04-28
          • 1970-01-01
          • 2014-05-11
          相关资源
          最近更新 更多