我使用的是Spring Integration 5.1.5 (使用spring-integration-amqp的RabbitMQ ),我在docs中读到Spring Integration支持project reactor类型(这里我指的是Mono、Flux等)。但是我不能让这个在ServiceActivator上工作。我尝试这样做:
@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框架来处理订阅。
Spring Integration支持这一点吗?如果是这样,我做错了什么?
发布于 2019-05-28 23:20:22
你到底想通过返回Mono<Void>来达到什么目的呢?
当服务激活器方法返回任何值时,该值将被发送到输出通道。如果是Mono<?>,则在单声道完成时执行发送。
只需将返回类型设置为void。
https://stackoverflow.com/questions/56320179
复制相似问题