Обработчики активатора службы не работают последовательно

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

@Bean
public IntegrationFlow 
inboundChannelFlow(@Value("${file.poller.delay}") long delay,
@Value("${file.poller.messages}") int maxMsgsPerPoll,
TaskExecutor taskExecutor, MessageSource<File> fileSource) 
{
return IntegrationFlows.from(fileSource,
        c -> c.poller(Pollers.fixedDelay(delay)
                .taskExecutor(taskExecutor)
                .maxMessagesPerPoll(maxMsgsPerPoll)))
        .handle("AWSFileManager", "fileUpload")
        .handle(fileWriterMessageHandler())
        .channel(ApplicationConfiguration.inboundChannel)
        .get();
}

person Raven21    schedule 29.11.2017    source источник


Ответы (1)


Как я уже говорил вам в другом месте, вам следует вернуться к книгам и Справочнику.

Тут надо иметь в виду, что между этими .handle() есть неявный MessageChannel и первый .handle() отправляет результат своего выполнения следующему.

Я действительно сомневаюсь, что они могут называться неправильно, как вы описали. Однако вы можете увидеть что-то в своих журналах, потому что все выполняется в асинхронном режиме через этот файл taskExecutor.

Я почему-то считаю, что fileWriterMessageHandler() это стандартный FileWritingMessageHandler. Этот ожидает java.io.File как payload сообщения запроса. Итак, если вы хотите вызвать это после своего пользовательского метода службы, вы должны убедиться, что последний возвращает объект File вместо boolean.

person Artem Bilan    schedule 29.11.2017
comment
Большое спасибо Артему за то, что быстро ответил на все мои вопросы и с таким терпением ответил на них идеально. Есть ли хорошие книги, которые я могу прочитать по Spring Integration, я нашел несколько блогов и этот docs.spring .io/spring-integration/reference будет ли этого достаточно или мне нужно указать что-то еще? - person Raven21; 29.11.2017
comment
Это теория: enterpriseintegrationpatterns.com. А это описание Spring Integration: manning.com/books/spring- интеграция в действии. Примеры находятся здесь: github.com/spring-projects/spring-integration-samples - person Artem Bilan; 29.11.2017
comment
Привет, Артем, я вижу, что ссылки, которые вы предоставили, ничего не говорят о dsl , было бы хорошо, если бы я просто просматривал интеграцию Spring с примерами, не касающимися dsl, хотя в настоящее время я работаю над интеграцией Spring dsl. - person Raven21; 30.11.2017
comment
Что ж, DSL — это просто дополнение к существующей channel -> consumer -> handler модели. К этому нужно привыкнуть в первую очередь и только после этого прыгать в ад DSL. Это здесь в любом случае: docs.spring.io/spring-integration/docs/5.0.0.RELEASE/reference/ - person Artem Bilan; 30.11.2017