Java中的AWS SWF活动或工作流界面的多个实现

时间:2018-04-17 15:40:33

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

我有一个活动界面:public interface BaseActivity

我的活动实施是:public class ABCActivity implements BaseActivity

我想添加第二个也实现BaseActivity的活动实现,例如public class DEFActivity implements BaseActivity

我还希望我的活动工作者能够处理这些活动中的任何一个。

从我一直在尝试的情况来看,这似乎不可能。

public interface BaseActivity {
    String activityMethod();
}

@Activities(version = 1.0", ...)
@ActivityRegistrationOptions( ... )
public interface ABCActivity extends BaseActivity {}

@Activities(version = 1.0", ...)
@ActivityRegistrationOptions( ... )
public interface DEFActivity extends BaseActivity {}

生成的ABCActivityClientDEFActivityClient不包含activityMethod。显然,如果我这样做:

@Activities(version = 1.0", ...)
@ActivityRegistrationOptions( ... )
public interface ABCActivity extends BaseActivity {
    String activityMethod()
}

然后一切都很好,但这种情况违背了BaseActivity的要点。

我认为工作流界面和实现方式相同。

有人有任何建议吗?

我问的原因是因为我想构建具有相同界面的多个工作流实现。这些工作流将共享一些常见活动(1个接口,1个实现),但也使用一些具有相同接口但实现不同的活动(1个接口,多个实现)。

当然,我可以为具有相同接口但实现不同的"活动写出不同的接口:

public interface ABCActivity

public class ABCActivityImpl implements ABCActivity

public interface DEFActivity

public class DEFActivityImpl implements DEFActivity

1 个答案:

答案 0 :(得分:0)

活动界面不仅定义了签名,还定义了活动的活动类型和计划选项。因此,根据定义,活动的多个实现必须共享通过注释定义的类型和调度选项。因为SWF不知道要调用哪个活动实现。所以你想要的是不可能的。

标准解决方法是为不同的活动实施使用不同的任务列表。这需要为每个活动实现运行单独的ActivityWorker。

另一种选择是使用允许将活动类型指定为字符串的DynamicActivityClient。请参阅"动态客户"来自AWS Flow Guide

的部分