GatewayProxyFactoryBean不会将Future <void>视为无应答方法

时间:2016-10-31 09:56:35

标签: spring-integration

查看消息网关方法的返回类型语义,void返回类型表示不生成任何回复(不会创建回复通道),Future返回类型表示异步调用模式(使用AsyncTaskExecutor)。

现在,如果希望将这两者结合起来并使无应答方法异步,可以说仅仅声明返回类型为Future<Void>的可能性就是:异步调用该方法(通过声明一个Future),该方法并不期望任何回复(通过声明一个类型参数Void)。

查看GatewayProxyFactoryBean的源代码,很明显不是这样:

private Object invokeGatewayMethod(MethodInvocation invocation, boolean runningOnCallerThread) throws Exception {
    ...
    boolean shouldReply = returnType != void.class;
    ...

仅检查简单的void返回类型。所以我想知道这是一个功能还是一个bug。如果这是一个功能,Future<Void>返回类型的行为并不像人们期望的那样,并且(在我看来)应该以不同的方式处理(导致验证错误或类似的事情)。

1 个答案:

答案 0 :(得分:0)

目前还不清楚在这种情况下返回Future<Void>的重点是什么。

我们不能将Future<Void>视为&#34;特殊&#34;是下游流可能会返回这样一个对象;框架不能暗示意图。

如果要运行不会异步返回回复的流,只需将请求通道设为ExecutorChannel;如果您使用的是XML配置documentation is here

如果您使用的是java配置,请定义类型为@Bean的频道ExecutorChannel