【问题标题】:Multiple implementations for an AWS SWF activity or workflow interface in JavaJava 中 AWS SWF 活动或工作流接口的多种实现
【发布时间】:2018-04-17 15:40:33
【问题描述】:

我有一个活动接口: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

【问题讨论】:

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


    【解决方案1】:

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

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

    另一个选项是使用允许将活动类型指定为字符串的 DynamicActivityClient。请参阅AWS Flow Guide中的“动态客户端”部分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-20
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多