查看消息网关方法的返回类型语义,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>
返回类型的行为并不像人们期望的那样,并且(在我看来)应该以不同的方式处理(导致验证错误或类似的事情)。
答案 0 :(得分:0)
目前还不清楚在这种情况下返回Future<Void>
的重点是什么。
我们不能将Future<Void>
视为&#34;特殊&#34;是下游流可能会返回这样一个对象;框架不能暗示意图。
如果要运行不会异步返回回复的流,只需将请求通道设为ExecutorChannel;如果您使用的是XML配置documentation is here。
如果您使用的是java配置,请定义类型为@Bean
的频道ExecutorChannel
。