Spring Integration 5.0 Reactor类型支持

时间:2017-12-18 16:15:40

标签: java spring spring-integration project-reactor

从发行说明(https://spring.io/blog/2017/11/29/spring-integration-5-0-ga-available):

  
      
  • 通过FluxMessageChannel支持Reactive Streams,   ReactiveStreamsConsumer和direct org.reactivestreams.Subscriber   AbstractMessageHandler中的实现;
  •   

我对Reactor支持的理解是您可以从变换器/处理程序返回Mono / Flux,Spring Integration会在尊重背压的同时自动将其转换为Messages。不幸的是,我不能让它像那样工作,例如:

IntegrationFlows.from("input")
                .handle((p, h) -> Flux.just(1, 2, 3))
                .log("l1")
                .channel("output")
                .get();

仍然使用FluxArray类型的有效负载记录一条消息,而不是使用整数有效负载记录三条消息。

2017-12-18 17:12:33.262  INFO 97471 --- [nio-8080-exec-1] l1 : GenericMessage [payload=FluxArray, headers={id=a9701681-9945-f953-8b72-df369c2982a3, timestamp=1513613553262}]

此外,根据此行为和新的

,文档中没有任何内容
  

FluxMessageChannel,   ReactiveStreamsConsumer和direct org.reactivestreams.Subscriber   AbstractMessageHandler中的实现

所以我的问题是,我是否理解正确实施的Reactor支持,哪里可以找到有关该主题的任何信息?

1 个答案:

答案 0 :(得分:2)

由于我们在这里发布消息,并且消息对您从服务返回的有效负载无关紧要,因此所有内容都只是包含在Message中。您需要一个特殊组件来了解此有效负载。其中一个是Splitter。这个确定您的有效负载是一个Reactive Streams Publisher,并将其作为Flux进行迭代。

另一个组件WebFluxInboundEndpoint本身支持这种有效负载。

您的自定义Service Activator可能需要Flux作为参数来处理。

但没有任何事情自动发生。 Spring Integration支持Reactive类型,但在没有最终用户偏好的情况下不进行处理。

顺便说一句,splitter应该以{{1​​}}作为输出提供,以便通过反压方式处理拆分的FluxMessageChannel

随意提出关于记录Flux的JIRA。的确,我们错过了。 FluxMessageChannel也需要更多的爱,我们有ReactiveStreamsConsumer的一些计划来改进Reactive Streams模型,我们会尝试使其更灵活,甚至可以选择默认打开它。但是今天没有什么可以承诺的。