Я работаю над интеграцией со службой REST, идея в том, что она опрашивается исходящим шлюзом marketingCategoryOutboundGateway
, реализованным HttpRequestExecutingMessageHandler
.Шлюз отправляет запрос в службу REST и передает свой ответ на канал marketingCategory
.Сам шлюз запускается сообщением, созданным marketingCategoryPollerMessageSource
с использованием фабричного метода makeTriggeringMessage
.
Проблема заключается в том, что служба возвращает постраничные результаты.Я что-то , которое прослушивало бы на канале marketingCategory
, кроме уже имеющегося у меня активатора службы, проверяет ответ и отправляет новое сообщение с увеличенным номером страницы, созданным makeTriggeringMessage
, на marketingCategoryPoller
channel, чтобы код вращался в цикле, пока не получит все страницы из службы REST.
Позволяет ли Spring Integration создавать такие фильтры, которые получают одно сообщение на входном канале, проверять его на соответствиеи выдать новое сообщение на выходной канал, если условие истинно?
Код:
//Responses from the REST service go to this channel
@Bean("marketingCategory")
MessageChannel marketingCategory() { return new PublishSubscribeChannel();}
//This channel is used to trigger the outbound gateway which makes a request to the REST service
@Bean
MessageChannel marketingCategoryPoller() {return new DirectChannel();}
//An adapter creating triggering messages for the gateway
@Bean
@InboundChannelAdapter(channel = "marketingCategoryPoller", poller = @Poller(fixedDelay = "15000"))
public MessageSource<String> marketingCategoryPollerMessageSource() { return () -> makeTriggeringMessage(1);}
//A factory for producing messages which trigger the gateway
private Message<String> makeTriggeringMessage(int page) {
//make a message for triggering marketingCategoryOutboundGateway
return MessageBuilder.withPayload("")
.setHeader("Host", "eclinic")
.setHeader("page", page)
.build();
}
//An outbound gateway, makes a request to the REST service and returns the response to marketingCategory channel
@Bean
@ServiceActivator(inputChannel = "marketingCategoryPoller")
public MessageHandler marketingCategoryOutboundGateway(@Qualifier("marketingCategory") MessageChannel channel) {
//make a request to the REST service and push the response to the marketingCategory channel
}
//handler for REST service responses
@Bean
@ServiceActivator(inputChannel = "marketingCategory")
public MessageHandler marketingCategoryHandler() {
return (msg) -> {
//process the categories returned by marketingCategoryOutboundGateway
};
}