1

我有一个这样的集成流程,使用 Spring Integration 4.3.x:

<int:gateway> => <int:transformer> => <int-http:outbound-gateway> => <int:transformer> => return to the gateway

网关由具有多个方法的接口定义,其中一些具有返回类型,而另一些则没有。实际上,我正在通过 HTTP 出站网关调用 REST API,并且一些方法正在返回一些有意义的东西,而另一些则什么都没有(即:一个空响应 + 一个我只是用来检测错误的状态代码)。

一旦我调用任何具有返回类型的网关方法,一切正常。当我用 void 返回类型调用一个时,我收到此错误:

org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available

我搜索了很多,阅读了 SI 文档并进行了调试,最终得到了这个:org.springframework.integration.gateway.GatewayProxyFactoryBean.invokeGatewayMethod(MethodInvocation, boolean),它基本上是这样做的:如果需要回复,则执行“sendAndReceive”,否则执行简单的“send”。前者设置replyChannel标题,第二个不设置。

这是有道理的,但是......为什么不简单地NullChannel replyChannel在后一种情况下自动设置标题?我不完全理解的是这种行为(即:每当流产生无法转换为网关响应的响应时出现异常)是否是期望的行为,因为我在文档。文档似乎建议简单地忽略任何回复,但事实并非如此,我现在需要在链中放置一个转换器,NullChannel replyChannel每当我检测到不会返回任何实际响应时设置一个标头......确实,我希望网关为我做的事情。实际上,只有当您将适配器作为最终流端点时,网关中的 void 方法才能“开箱即用”地工作。

也许我错过了一些东西,所以这就是这个问题的原因。

4

1 回答 1

0

这是一个有趣的建议 ( NullChannelin replyChannel) 标题。

我们必须考虑是否会产生一些意想不到的后果。

同时,您应该能够使用

@Gateway(headers = @GatewayHeader(name = MessageHeaders.REPLY_CHANNEL,
    expression = "@nullChannel"))
void foo(String bar);
于 2020-05-12T16:59:09.553 回答