首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Integration ServiceActivator可以与项目反应器类型一起工作吗?

Spring Integration ServiceActivator可以与项目反应器类型一起工作吗?
EN

Stack Overflow用户
提问于 2019-05-27 13:34:07
回答 1查看 241关注 0票数 1

我使用的是Spring Integration 5.1.5 (使用spring-integration-amqp的RabbitMQ ),我在docs中读到Spring Integration支持project reactor类型(这里我指的是MonoFlux等)。但是我不能让这个在ServiceActivator上工作。我尝试这样做:

代码语言:javascript
复制
@ServiceActivator
public Mono<Void> myMethod(List<Message> messages) {
   Mono<Void> result = myService.doServiceStuff(messages);
   return result;
}

(请注意,我也在尝试让myMethodFlux<Message>一起工作,但这是另一个问题)。

myMethod返回Mono<Void>时,我得到这个错误:

代码语言:javascript
复制
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

将方法更改为:

代码语言:javascript
复制
@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支持这一点吗?如果是这样,我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-28 23:20:22

你到底想通过返回Mono<Void>来达到什么目的呢?

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

只需将返回类型设置为void

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56320179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档