错误消息处理程序是一种单向方式,无法配置输出通道

问题描述 投票:0回答:1

我有以下配置,并且我在Spring集成Java DSL服务执行器(.handle)应该使用bean

中使用了以下样式
    
@Bean
public IntegrationFlow flow(PollerMetada poller, FileReadingMessageSource source){
   return IntegrationFlows.from(source, e->e.poller(poller)
            .handle(this::mainHandle)
            .channel("somechannel")
            .get();
}

public FileRequest mainHandle(Message<?> message){
       ...
       return request;
    }

但是我收到错误,我的处理程序是单向 MessageHandler,如何使其不是单向以便我可以配置输出通道?谢谢你

spring-integration spring-integration-dsl
1个回答
0
投票

您使用

.handle(this::mainHandle)
API。这完全符合
MessageHandler
合约:
void handleMessage(Message<?> message)
。 你的方法是这样的
mainHandle(Message<?> message)
。因此,方法的返回类型将被忽略,因为映射到
MessageHandler
的方法引用对返回类型一无所知 - 只是
void

要使其与返回类型一起使用,您需要使用不同的 API:

public <P> B handle(GenericHandler<P> handler) {

合同在哪里:

Object handle(P payload, MessageHeaders headers);

要将其与您的

mainHandle()
合约相匹配,必须像这样使用:

.handle(Message.class, (p, h) -> mainHandle(p))

或者您可以使用基于方法名称的 API:

.handle(this, "mainHandle")
© www.soinside.com 2019 - 2024. All rights reserved.