Spring integration 在出站网关中接收空响应会阻止执行IntegrationFlow中的进一步步骤

Spring integration 在出站网关中接收空响应会阻止执行IntegrationFlow中的进一步步骤,spring-integration,Spring Integration,我有一个简单的集成流,通过MarshallingWebServiceOutboundGateway发送SOAP消息。通常情况下,目标服务的响应是空消息。当然,它可以返回soap错误,但是,一旦成功,我们期望得到一个空的响应。现在的问题是,如果我们得到一个空响应,SI会将其识别为“无响应”,并且不会执行IntegrationFlow中网关之后的步骤。即使网关设置为setIgnoreEmptyResponses(false),也会发生这种情况。根据,它只在收到空字符串时工作,但在我的例子中,从服务返

我有一个简单的集成流,通过MarshallingWebServiceOutboundGateway发送SOAP消息。通常情况下,目标服务的响应是空消息。当然,它可以返回soap错误,但是,一旦成功,我们期望得到一个空的响应。现在的问题是,如果我们得到一个空响应,SI会将其识别为“无响应”,并且不会执行IntegrationFlow中网关之后的步骤。即使网关设置为setIgnoreEmptyResponses(false),也会发生这种情况。根据,它只在收到空字符串时工作,但在我的例子中,从服务返回的响应表示为null

我希望无论外部服务响应为空还是非空,都能够继续流。实现这一目标的最佳方式是什么

EDIT1:感觉特别奇怪,因为即使两个处理程序都订阅了publishSubscribeChannel(而不是直接在主流上),它也会停止IntegrationFlow的执行。我希望所有订阅者都能被执行,除非前一个订阅者产生了异常,但事实并非如此

MarshallingWebServiceOutboundGateway outboundGateway=新建MarshallingWebServiceOutboundGateway(
gatewaysUtils.buildOutboundUriToX(webServiceProperties.getServicePath()),
jaxb2马歇尔勒,messageFactory);
outboundGateway.setIgnoreEmptyResponses(false);
IntegrationFlows.from(channelName())
.transform(getKafkaMarshaller()::反序列化)
.handle(getOutboundGateway())
.handle(messageStatusRegistrator.registerMessageStatus())
.get();
EDIT2:再次尝试publishSubscribeChannel后,这次成功了。我觉得有点不舒服,但显然它确实有效,没有任何副作用(目前)。下面是固定流量。需要注意的一点是,当服务返回一个非空、非错误响应时,如果您不显式提供标头或replychannel,则可能会导致“输出通道或replychannel标头可用”

IntegrationFlows.from(channelName())
            .transform(getKafkaMarshaller()::deserialize)
            .publishSubscribeChannel(channel -> channel
                .subscribe(subflow -> subflow
                    .handle(getOutboundGateway()))
                .subscribe(subflow -> subflow
                    .handle(messageStatusRegistrator::registerMessageStatus)))
            .get();

返回
null
用于终止流;不过,发布/订阅解决方案应该有效;显示您在这种情况下的配置。这有点令人费解,但现在我再次尝试pubsub解决方案,这次突然奏效了。我发誓这不是最后一次因为某种原因,我(可能)当时没有任何奇怪的配置。谢谢你的提示