我正在与 REST 服务集成,想法是它marketingCategoryOutboundGateway
由HttpRequestExecutingMessageHandler
. 网关向 REST 服务发出请求并将其响应推送到marketingCategory
通道。网关本身由marketingCategoryPollerMessageSource
使用makeTriggeringMessage
工厂方法创建的消息触发。
问题是服务返回分页结果。除了我已经拥有的服务激活器之外,我会在频道上收听一些东西marketingCategory
,检查是否响应并将具有由创建的递增页码的新消息推makeTriggeringMessage
送到marketingCategoryPoller
频道,以便代码将在循环中旋转,直到它获取来自 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
};
}