spring-integration - Spring Integration 和 DSL 升级 - 单向 'MessageHandler' 并且不适合配置 'outputChannel' 错误

标签 spring-integration

升级上述 jar 文件后,我不断遇到以下问题:

org.springframework.beans.factory.BeanCreationException: The 'currentComponent' (org.springframework.integration.router.MethodInvokingRouter@5ddcc487) is a one-way 'MessageHandler' and it isn't appropriate to configure 'outputChannel'. This is the end of the integration flow. at org.springframework.integration.dsl.IntegrationFlowDefinition.registerOutputChannelIfCan(IntegrationFlowDefinition.java:3053) at org.springframework.integration.dsl.IntegrationFlowDefinition.register(IntegrationFlowDefinition.java:2994) at org.springframework.integration.dsl.IntegrationFlowDefinition.handle(IntegrationFlowDefinition.java:1167) at org.springframework.integration.dsl.IntegrationFlowDefinition.handle(IntegrationFlowDefinition.java:987) at org.springframework.integration.dsl.IntegrationFlowDefinition.handle(IntegrationFlowDefinition.java:964) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

代码片段:

public IntegrationFlow inBoundFlow(ConnectionFactory mqConnection)
    throws JMSException {

    return IntegrationFlows
            .from(Jms.messageDrivenChannelAdapter(mqConnection)
                    .configureListenerContainer(listenerContainer)
                    .destination(mqProperties.getQueue().getRequest())
                    .errorChannel(ErrorChannel())
                    .setHeaderMapper(new DefaultJmsHeaderMapper()))
            .filter(filterMessage, "filterMessage", m -> m.discardChannel(DiscardChannel()))
            .route(mqMessageRouter, "messageRouter")
            .handle(errorChannel, "handleError")
            .get();
}


@Named
public class MQErrorMessageChannel {

    @ServiceActivator(inputChannel = MQ_ERROR_MESSAGE_INPUT_CHANNEL, outputChannel = MQ_ERROR_MESSAGE_OUTPUT_CHANNEL)
    public Message<String> handleError(Throwable t) {
//Do Something....
        }
        return null;
    }
}

有指针吗?

最佳答案

这种方法调用形式中的 .route(mqMessageRouter, "messageRouter") 完全是单向,并且您不能在流程中指向此后的任何内容.

没有严格决定路由器之后的下一个 channel ,因此我们无法从那里继续流程。

只需将您的流分成几个,然后将 .handle() 添加到每个特定的路由流即可。

关于spring-integration - Spring Integration 和 DSL 升级 - 单向 'MessageHandler' 并且不适合配置 'outputChannel' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43375049/

相关文章:

java - 具有 FileReadingMessageSource 的 IntegrationFlows 对同一输入文件触发作业两次

java - 如何为 MongoDbMessageStore.MessageReadingMongoConverter 设置 mapKeyDotReplacement

spring-boot - 混合 spring-integration 和 spring scheduler

java - 入站网关中的 HttpMessageConverter 错误处理

java - Spring TCP 通过传入连接发送数据

java - 如何使用 spring 集成手动确认 rabbitmq 消息

java - 为什么当 ftp java dsl 配置被引入 spring 集成核心时过滤器行为发生了变化

java - 在 Paho MQTT Java 客户端上增加最大飞行时间有什么缺点吗?

java - spring 集成流程中的错误处理实践

int-jms :outbound-channel-adapter from spring integration 的 Java 配置