【问题标题】:SWF: How can I signal the parent workflow from the child workflow?SWF:如何从子工作流向父工作流发出信号?
【发布时间】:2018-04-26 19:44:49
【问题描述】:

我正在尝试向我的父工作流发出信号以更新其状态变量。父工作流 id 被传递给子工作流的 execute 方法。

@Autowired
private AmazonSimpleWorkflowClient swfClient;
@Autowired
private String swfDomain;

private ParentWorkflowClientExternalFactory clientExternalFactory = new ParentWorkflowClientExternalFactoryImpl(swfClient, swfDomain);

@Override
public Promise<String> childActivityMethod(String parentWorkflowId) {
    ParentWorkflowClientExternal clientExternal = clientExternalFactory.getClient(parentWorkflowId);
    clientExternal.updateState(...);
}

但是,这会在 SWF 代码中引发 NullPointerException(AmazonSimpleWorkflow 为空):

["java.lang.NullPointerException",{"cause":null,"stackTrace":[{"methodName":"signalWorkflowExecution","fileName":"GenericWorkflowClientExternalImpl.java","lineNumber":87,"className":"com.amazonaws.services.simpleworkflow.flow.worker.GenericWorkflowClientExternalImpl","nativeMethod":false},{"methodName":"signalWorkflowExecution","fileName":"DynamicWorkflowClientExternalImpl.java","lineNumber":167,"className":"com.amazonaws.services.simpleworkflow.flow.DynamicWorkflowClientExternalImpl","nativeMethod":false},...

当我初始化不带参数的ClientExternalFactory 时:

private ParentWorkflowClientExternalFactory clientExternalFactory = new ParentWorkflowClientExternalFactoryImpl();

抛出的异常是:The required property genericClient is null. It could be caused by instantiating the factory through the default constructor instead of the one that takes service and domain arguments.

ParentWorkflow#updateState 这样做:

private MyWorkflowState state;

// This method has @Signal in the interface.
@Override
public void updateState(MyWorkflowState newState) {
    state = newState;
}

有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    从工作流界面生成了两种类型的客户端。内部的和外部的。内部预计将在工作流代码中使用,而外部代码将在工作流之外使用(例如来自 Web 服务器)。 您正在尝试在不受支持的工作流中使用外部客户端。请改用内部客户端(使用 ParentWorkflowClientFactory 创建)。请参阅Flow Development Guide 了解更多信息。

    【讨论】:

    • 谢谢,这就是问题所在。我错过了外部和内部客户之间的区别。
    • 顺便说一句。 Flow 框架的下一个版本甚至不使用生成的代码:github.com/uber-java/cadence-client
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多