我正在使用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支持吗?如果是这样,我在做什么错了?
答案 0 :(得分:1)
您到底想通过返回Mono<Void>
来实现什么?
当服务激活器方法返回任何值时,该值将发送到输出通道。如果是Mono<?>
,则在单声道完成时执行发送。
只需将返回类型设置为void
。