Spring Integration ServiceActivator是否可以与Project Reactor类型一起使用?

时间:2019-05-27 05:34:07

标签: spring-boot spring-integration project-reactor spring-integration-amqp

我正在使用Spring Integration 5.1.5(RabbitMQ使用spring-integration-amqp),并且在docs中看到Spring Integration支持project reactor类型(我的意思是{ {1}},Mono等)。但是我无法使它适用于ServiceActivator。我正在尝试这样的事情:

Flux

(请注意,我也在尝试使@ServiceActivator public Mono<Void> myMethod(List<Message> messages) { Mono<Void> result = myService.doServiceStuff(messages); return result; } myMethod一起工作,但这是一个单独的问题)。

Flux<Message>返回myMethod时,出现此错误:

Mono<Void>

将方法更改为:

Caused by: org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
    at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:426)
    at org.springframework.integration.handler.AbstractMessageProducingHandler.doProduceOutput(AbstractMessageProducingHandler.java:284)
    at org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:265)
    at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:223)
    at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:129)
    at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:162)
    ... 42 common frames omitted

并手动订阅反应式流将使其正常工作,但这显然不是我想要做的。我希望@ServiceActivator public void myMethod(List<Message> messages) { Mono<Void> result = myService.doServiceStuff(messages); result.subscribe(); // This is not what I want to do } 框架能够处理订阅。

Spring Integration支持吗?如果是这样,我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您到底想通过返回Mono<Void>来实现什么?

当服务激活器方法返回任何值时,该值将发送到输出通道。如果是Mono<?>,则在单声道完成时执行发送。

只需将返回类型设置为void