AWS GetActivityTask, запускающий из одного и того же конечного автомата - PullRequest
0 голосов
/ 04 мая 2019

Заранее спасибо за ваше время и ответ.

У меня есть конечный автомат AWS со следующими действиями.

  1. Извлечение первого доступного файла данных с внешнего FTP-сервера
  2. Обработка данных (время обработки может быть разным)
  3. Загрузка обработанных данных на другой 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
        }
    }
...