Sprint 集成 DSL - Http 入站适配器和轮询器
Posted
技术标签:
【中文标题】Sprint 集成 DSL - Http 入站适配器和轮询器【英文标题】:Sprint Integration DSL - Http Inbound adapter and poller 【发布时间】:2018-08-07 03:39:54 【问题描述】:我是 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 消息源。
【问题讨论】:
【参考方案1】:好吧,您忽略了 HTTP 本质上是 事件驱动 的事实,并且它在这里是服务器。您从最终用户的角度使用它,就像从浏览器或某些命令行工具或任何其他 HTTP 客户端调用 URL 一样。
不确定是什么让您认为 HTTP 服务器正在轮询。并且不确定它应该轮询什么......
也许你需要的恰恰相反——Http.outboundGateway()
,你调用一些远程 REST 服务并等待回复。但这已经不是一个源,它是一个处理器。
如果确实需要定期调用这样的服务,可以考虑使用简单的轮询MessageSource
:
IntegrationFlows.from(() -> new GenericMessage<>(""),
.poller(Pollers.fixedDelay(period))
.handle(Http.outboundGateway("http://localhost:8080/data"))
【讨论】:
是的,我显然对这个命名法感到困惑,而且我对 Spring Integration 缺乏正确的理解。我发布的配置使用 Spring Integration 创建了一个端点,该端点充当入站通道。谢谢!以上是关于Sprint 集成 DSL - Http 入站适配器和轮询器的主要内容,如果未能解决你的问题,请参考以下文章
通过 Spring 集成入站适配器接收 JMS 消息随机失败
Spring集成+文件读取消息源_入站通道适配器+出站网关。
有一些方法可以为 spring 集成 dsl 流生成图表吗?