AWS SWF - 返回工作流程的结果

时间:2014-04-24 11:24:33

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

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

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

3 个答案:

答案 0 :(得分:3)

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

AWS Workflow执行异步,以便生成代码返回类型的原因为void。如果你想,那么你可以使用

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

从工作流程返回值所需的步骤是:

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

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

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