具有void方法的Spring Integration Gateway返回类型:为什么它不自动设置NullChannel replyChannel?

问题描述 投票:1回答: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”,否则执行简单的“发送”。前者设置replyChannel标头,第二个不设置。

这很有意义,但是...为什么不简单地在后一种情况下自动设置NullChannel replyChannel标头?我还不完全了解这种行为(即,当流产生无法转换为网关响应的响应时获取异常)是否是理想的,因为我在其中找不到任何提及文档。文档似乎建议您完全忽略任何答复,但事实并非如此,现在,每当我发现没有实际响应时,我就需要在链中放置一个设置NullChannel replyChannel标头的转换器。返回...确实,这是我期望网关为我做的事情。确实,网关中的void方法似乎仅在将适配器作为最终流端点时才可以“开箱即用”地工作。

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

spring-integration void gateway spring-integration-http
1个回答
0
投票
这是一个有趣的建议(NullChannel中的replyChannel)标题。
© www.soinside.com 2019 - 2024. All rights reserved.