【发布时间】:2019-10-18 04:53:34
【问题描述】:
提前感谢您的时间和回复。
我有一个带有以下活动的 AWS 状态机。
- 从外部 FTP 服务器拉取第一个可用的数据文件
- 处理数据(处理时间可能不同)
- 将处理后的数据上传到另一个 FTP 服务器
我有一个在 EC2 实例中运行的 Java 应用程序,它有 3 个线程并使用如下所示的代码轮询活动。 Java 应用程序调用适当的工作人员来完成步骤 #1、2 和 3 的实际工作。 这里重要的一点是,这里的所有 3 个活动都应该发生在同一个服务器上 这些步骤从服务器中的文件位置写入和读取。
我有数百个文件要在 FTP 服务器中处理,因此我有 5 个 Ec2 服务器运行 Java 应用程序的副本。
现在我开始执行 5 次状态机。 这将允许我在 5 台服务器上分发文件处理。
但是,我的问题是这样的:
我怎样才能确保 来自给定状态机执行的活动由 SAME EC2 实例服务器处理。
我不希望给定执行的活动由不同的 EC2 实例处理。 在下面的代码中(来自https://github.com/goosefraba/aws-step-function-activity-example/blob/master/src/main/java/at/goosefraba/ActivityProcessor.java), 我看不到任何方法可以 getActivityTask 属于特定执行。
final ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setSocketTimeout((int) TimeUnit.SECONDS.toMillis(70));
final AWSStepFunctions client = AWSStepFunctionsClientBuilder
.standard()
.withClientConfiguration(clientConfiguration)
.build();
while (true) {
GetActivityTaskResult getActivityTaskResult =
client.getActivityTask(
new GetActivityTaskRequest().withActivityArn(getArn()));
if (getActivityTaskResult.getTaskToken() != null) {
// Do work
}
}
【问题讨论】:
标签: amazon-web-services aws-step-functions