Spring Cloud Task — запустить задачу из репозитория maven в контейнере докеров

Я изучаю Spring Cloud Task и пишу простое приложение, которое разделено на 3 сервиса. Первый — это TaskApplication, который имеет только main() и реализует CommandLineRunner, второй — это TaskIntakeApplication, который получает запросы и отправляет их в RabbitMQ, третий сервис — это TaskLauncherApplication, который получает сообщения от RabbitMQ и запускает задачу с полученными параметрами.

@Component
@EnableBinding(Source.class)
public class TaskProcessor {

    @Autowired
    private Source source;

    public void publishRequest(String arguments) {
        final String url = "maven://groupId:artifatcId:jar:version";
        final List<String> args = Arrays.asList(arguments.split(","));
        final TaskLaunchRequest request = new TaskLaunchRequest(url, args, null, null, "TaskApplication");
        final GenericMessage<TaskLaunchRequest> message = new GenericMessage<>(request);
        source.output().send(message);
    }
}

И, как вы можете видеть, я вызываю свой встроенный артефакт, указав URL-адрес maven, но мне интересно, как я могу вызвать артефакт из другого контейнера докеров?


person user    schedule 03.01.2018    source источник


Ответы (1)


Если вы собираетесь запускать приложение-задачу из вышестоящего события (например, нового события файла, новой записи БД, нового сообщения в событии Rabbit и т. д.), вы просто используете соответствующие стандартные приложения, а затем запустите задачу через панель запуска задач.

Следуйте этому примеру о том, как эти 3 шага организованы через DSL SCDF.

Возможно, вы могли бы рассмотреть возможность повторного использования существующих приложений вместо того, чтобы изобретать их заново, если только у вас нет совершенно другого требования, и эти приложения не могут ему соответствовать. Я бы посоветовал попробовать заставить упомянутый выше пример работать локально, прежде чем вы рассмотрите возможность расширения поведения.

person Sabby Anandan    schedule 03.01.2018