2016-04-03 18 views
2

Für mich scheint dies das einfachste mögliche Beispiel für die Federintegration zu sein. Ich versuche, von der si4demo zu lernen. Aber wenn ich es laufen, bekomme ich diese Ausnahme:Warum abonniert der Integrationsfluss den from-Kanal?

Exception in thread "main" org.springframework.messaging.MessageDeliveryException: Dispatcher hat keine Abonnenten für Kanal 'application.inbox' .; verschachtelte Ausnahme ist org.springframework.integration.MessageDispatchingException: Dispatcher keine Abonnenten hat

Wo ich falsch gehe? Erzeugt der definierte Ablauf keine Subskription für den Posteingangs-Channel?

import org.springframework.boot.SpringApplication; 
import org.springframework.context.ConfigurableApplicationContext; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.integration.annotation.IntegrationComponentScan; 
import org.springframework.integration.annotation.MessagingGateway; 
import org.springframework.integration.channel.DirectChannel; 
import org.springframework.integration.dsl.IntegrationFlow; 
import org.springframework.integration.dsl.IntegrationFlows; 
import org.springframework.messaging.MessageChannel; 

@Configuration 
@ComponentScan 
@IntegrationComponentScan 
public class App { 

    public static void main(String[] args) { 

     try (ConfigurableApplicationContext ctx = SpringApplication.run(App.class, args)) { 

      final Gateway gateway = ctx.getBean(Gateway.class); 
      final String rs = gateway.send("hullo"); 
      System.out.println(rs); 

     } 

    } 

    private static final String INBOX = "inbox"; 

    @MessagingGateway(defaultRequestChannel = INBOX) 
    public interface Gateway { 
     String send(String msg); 
    } 

    @Bean 
    public IntegrationFlow flow() { 
     return IntegrationFlows.from(INBOX) 
       .transform(p -> "world") 
       .get(); 
    } 

    @Bean(name = INBOX) 
    public MessageChannel inbox() { 
     return new DirectChannel(); 
    } 

} 

Antwort

3

Sieht aus wie Sie die wichtigsten Spieler verpasst haben - @EnableIntegraion:

Ab Version 4.0, die @EnableIntegration Annotation eingeführt worden ist, die Registrierung von Spring Integration Infrastruktur Bohnen zu ermöglichen (siehe JavaDocs). Diese Annotation ist erforderlich, wenn nur Java & Annotation-Konfiguration verwendet wird, z. mit Spring Boot und/oder Spring Integration Messaging Annotation-Unterstützung und Spring Integration Java DSL ohne XML-Integrationskonfiguration.

http://docs.spring.io/spring-integration/docs/4.3.0.BUILD-SNAPSHOT/reference/html/overview.html#configuration-enable-integration

+0

i schätzen vor allem die Verbindung zu TFM! – djeikyb