【问题标题】:Async ServiceActivator in Spring Integration 4.3Spring Integration 4.3 中的异步 ServiceActivator
【发布时间】:2016-12-04 19:36:54
【问题描述】:

Spring Integration 4.3 引入了异步 ServiceActivators,但我看不出在没有 XML 配置的情况下如何使用它们。

相关的问题https://jira.spring.io/browse/INT-3945 提到将功能添加到@ServiceActivator,但似乎没有实现。

文档提及:

从 4.3 版开始,您现在可以将 async 属性设置为 true(使用 Java 配置时为 setAsync(true))。

但它没有提到在哪个对象上调用该方法。在我看来,您必须明确定义一个消息处理程序 bean 才能调用该方法。 通常这不是必须的,用@ServiceActivator注解的方法定义目标bean就足够了。

要么我遗漏了一些东西,要么基于注释的配置已被排除在此功能之外。有人能解释一下吗?

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    你是对的;目前不支持带注释的 POJO 方法。

    您可以使用配置器 bean 解决它(自动装配消息处理程序并设置异步标志)...

    @SpringBootApplication
    public class So40962780Application {
    
        public static void main(String[] args) {
            SpringApplication.run(So40962780Application.class, args);
        }
    
        @InboundChannelAdapter(channel = "in", poller = @Poller(fixedRate = "5000"))
        public String gen() {
            return "foo";
        }
    
        @ServiceActivator(inputChannel = "in", outputChannel = "out")
        public ListenableFuture<String> foo(String in) {
            SettableListenableFuture<String> future = new SettableListenableFuture<>();
            future.set(in.toUpperCase());
            return future;
        }
    
        @ServiceActivator(inputChannel = "out")
        public void syso(Object payload) {
            System.out.println(payload);
        }
    
        @Bean
        public AsyncConfigurer asyncConfigurer() {
            return new AsyncConfigurer();
        }
    
        public static class AsyncConfigurer {
    
            @Autowired
            @Qualifier("so40962780Application.foo.serviceActivator.handler")
            private AbstractReplyProducingMessageHandler fooHandler;
    
            @PostConstruct
            public void configureAsync() {
                this.fooHandler.setAsync(true);
            }
    
        }
    
    }
    

    【讨论】:

    • 谢谢,很好的解决方法,我自己不会想出它。我很好奇为什么注释中不支持它,因为它似乎是有意的。疏忽?还是某种意想不到的困难?乍一看,添加似乎很简单。
    • 只是一个疏忽。工厂 bean 支持它,但不支持注解。随意打开一个 JIRA 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多