Заранее спасибо за ваше время и ответ.
У меня есть конечный автомат AWS со следующими действиями.
- Извлечение первого доступного файла данных с внешнего FTP-сервера
- Обработка данных (время обработки может быть разным)
- Загрузка обработанных данных на другой FTP-сервер
У меня есть Java-приложение, работающее в экземпляре EC2, который имеет 3 потокаи опрашивает действия, используя код, как показано ниже.Java-приложение вызывает соответствующих работников для выполнения фактической работы для шагов # 1,2 и 3. Важным моментом здесь является то, что все 3 действия здесь должны выполняться на одном и том же сервере , так как шаги пишут и читают израсположение файла на сервере.
У меня есть сотни файлов для обработки на FTP-сервере, поэтому у меня есть 5 серверов Ec2, на которых выполняются копии приложения java.
Теперь я запускаю5 казней из автомата .Это позволило бы мне распределить обработку файлов по 5 серверам.
Однако моя проблема заключается в следующем:
Как я могу гарантировать, что действия из данного выполнения конечного автомата обрабатываютсятем же сервером экземпляров 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
}
}