2016-12-04 4 views
0

Frühjahr Integration 4.3 eingeführt async ServiceActivators, aber ich sehe nicht, wie ich sie ohne XML-Konfiguration verwenden.Async ServiceActivator im Frühjahr Integration 4.3

Das relevante Problem https://jira.spring.io/browse/INT-3945 erwähnt das Hinzufügen der Funktion zu @ServiceActivator, aber es scheint, dass dies nicht implementiert wurde.

Dokumentation erwähnt:

Ab Version 4.3 können Sie jetzt von dem Asynchron-Attribute auf true gesetzt (setAsync (true) bei der Verwendung von Java-Konfiguration).

Aber es erwähnt nicht, auf welches Objekt diese Methode aufgerufen werden soll. Es scheint mir, dass Sie explizit eine Message-Handler-Bean definieren müssen, um die Methode dafür aufzurufen. Normalerweise ist dies nicht notwendig, die Definition der Ziel-Bean mit der @ServiceActivator annotierten Methode ist ausreichend.

Entweder fehlt mir etwas, oder die Annotation basierte Konfiguration wurde von dieser Funktion ausgeschlossen. Kann jemand das aufklären?

Antwort

1

Sie haben Recht; Es wird derzeit nicht für annotierte POJO-Methoden unterstützt.

Sie können mit einem configurer Bohne um ihn herum arbeiten (autowire die Message-Handler und stellen Sie die Asynchron-Flagge) ...

@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); 
     } 

    } 

} 
+0

Danke, schön Problem zu umgehen, würde ich nicht mit ihm gekommen ist myself.I‘ Ich bin allerdings neugierig, warum es in der Annotation nicht unterstützt wird, so wie es gedacht war. Ein Versehen? Oder eine unerwartete Schwierigkeit? Auf den ersten Blick scheint es einfach hinzuzufügen. – rainerfrey

+0

Nur ein Versehen. Die Factory-Bean unterstützt es, aber nicht die Annotation. Fühlen Sie sich frei, ein JIRA Problem zu öffnen. –

Verwandte Themen