首页 > 解决方案 > 弹簧集成 | 响应式流支持 | 创建反应式消息网关时出现异常

问题描述

我正在尝试使用 Reactive Streams Support 升级我现有应用程序之一中的 spring 集成流。采取的方法是将Gateway方法的参数和返回类型更改为Mono。流程执行顺利,当回复到达网关时,会导致java.lang.IllegalArgumentException: 'beanFactory' must not be null

我正在使用 Spring Boot 2.3.0。

inputChannel是一个DirectChannel

gatewayReplyChannel是一个FluxMessageChannel

@MessagingGateway(name = "reactiveGateway")
public interface EntryGate {

    @Gateway(requestChannel = "inputChannel", replyChannel = "gatewayReplyChannel")
    Mono<String> process(final Mono<String> input);

}

异常跟踪

Caused by: java.lang.IllegalArgumentException: 'beanFactory' must not be null
    at org.springframework.util.Assert.notNull(Assert.java:198)
    at org.springframework.integration.channel.ChannelUtils.getErrorHandler(ChannelUtils.java:51)
    at org.springframework.integration.endpoint.ReactiveStreamsConsumer.onInit(ReactiveStreamsConsumer.java:155)
    at org.springframework.integration.context.IntegrationObjectSupport.afterPropertiesSet(IntegrationObjectSupport.java:214)
    at org.springframework.integration.gateway.MessagingGatewaySupport.registerReplyMessageCorrelatorIfNecessary(MessagingGatewaySupport.java:806)
    at org.springframework.integration.gateway.MessagingGatewaySupport.sendAndReceiveMessageReactive(MessagingGatewaySupport.java:609)
    at org.springframework.integration.gateway.GatewayProxyFactoryBean.sendOrSendAndReceive(GatewayProxyFactoryBean.java:639)
    at org.springframework.integration.gateway.GatewayProxyFactoryBean.invokeGatewayMethod(GatewayProxyFactoryBean.java:573)

任何人都可以帮忙吗?

标签: spring-integrationreactive-streams

解决方案


MessagingGatewaySupport.registerReplyMessageCorrelatorIfNecessary()必须修复才能endpoint.setBeanFactory(beanFactory);调用. ReactiveStreamsConsumer显然我们只是没有一个测试用例来覆盖replyChannelas a FluxMessageChannel.

考虑根本不使用它replyChannel作为解决方法。对于这种流来说真的无关紧要:它已经通过Mono返回类型进行反应。没有理由在内部转移到其他反应流以进行回复相关性。


推荐阅读