Sprint集成DSL-Http入站适配器和轮询器

最后发布: 2018-02-27 13:13:52


问题

我是Spring Integration的新手,我正在尝试设置一个简单的用例:

轮询远程REST端点,将返回的有效负载分成多行,然后将其发送到Kafka出站适配器。 我成功完成了类似的工作,该工作使用了文件适配器,但是我仍然坚持使用HTTP适配器。 我不了解如何将轮询器与HTTP入站适配器关联。

到目前为止,我的方法是创建一个简单的流程:

return IntegrationFlows
  .from
    (
      Http.inboundChannelAdapter("http://localhost:8080/data")
        .requestMapping(m -> m.methods(HttpMethod.GET))
        .replyTimeout(20)
      )
  .channel(INBOUND_DEMO_CHANNEL)
  .get();

inboundChannelAdapter似乎并不接受Poller 在上一次使用文件的尝试中,我创建了FileReadingMessageSource因此流程如下:

return IntegrationFlows.from(fileReadingMessageSource,
    // POLLER CONFIGURATION
    .poller(Pollers.fixedDelay(period)
    ...
    .get();

但我找不到等效的HTTP消息源。

spring-integration spring-integration-dsl spring-integration-http
回答

好吧,您错过了以下事实:HTTP本质上是事件驱动的 ,而这里是服务器。 您从最终用户的角度使用它,例如通过浏览器或某些命令行工具或任何其他HTTP客户端调用URL。

不知道是什么使您认为HTTP服务器正在轮询。 而且不确定它应该轮询什么...

也许您需要的恰好相反Http.outboundGateway() ,您在其中调用一些远程REST服务并等待答复。 但这已经不是来源 ,而是处理器

如果确实需要定期调用此类服务​​,则可以考虑使用简单的轮询MessageSource

IntegrationFlows.from(() -> new GenericMessage<>(""),
      .poller(Pollers.fixedDelay(period))
  .handle(Http.outboundGateway("http://localhost:8080/data"))