2016-11-08 1 views
0

Ich habe eine Spring-Boot-Anwendung, die das Spring Boot Starter Web verwendet. Dies erstellt eine laufende Tomcat-Instanz und richtet den HTTP-Server ein, der auf einem Port ausgeführt wird. Innerhalb meiner Kamelroute möchte ich diesen HTTP-Server als Komponente für HTTP-Anfragen verwenden, aber ich kann nicht herausfinden, wie ich sie nutzen kann. Ich sehe viele, viele Beispiele für die Konfiguration einer Jetty-Instanz und deren Verwendung, aber hätte ich dann nicht tatsächlich zwei http-Server laufen? Ich möchte nur eins haben. Ich nehme an, der http-Server ist bereits autowired, da ich davon mit anderem Quellcode (wie einem RestController) konsumieren kann und ich kann es auch in meinen Spring-Boot-Logs sehen.Verwenden Sie den vorhandenen http-Server im Spring-Boot als Kamel-Endpunkt

@Component 
public class ExampleRoute extends RouteBuilder 
{ 
    @Override 
    public void configure() throws Exception 
    { 

     //@formatter:off 

     from(<want to take in an http request here>) 
      .log(LoggingLevel.INFO, log, "Hello World!"); 

     //@formatter:on 

    } 
} 

Antwort

2

Es ist ein Beispiel hier: https://github.com/camelinaction/camelinaction2/tree/master/chapter7/springboot-camel

Sie können eine ServletRegistrationBean, dass das Setup der Camel Servlets mit Frühlings-Stiefel zu registrieren.

@Bean 
ServletRegistrationBean camelServlet() { 
    // use a @Bean to register the Camel servlet which we need to do 
    // because we want to use the camel-servlet component for the Camel REST service 
    ServletRegistrationBean mapping = new ServletRegistrationBean(); 
    mapping.setName("CamelServlet"); 
    mapping.setLoadOnStartup(1); 
    // CamelHttpTransportServlet is the name of the Camel servlet to use 
    mapping.setServlet(new CamelHttpTransportServlet()); 
    mapping.addUrlMappings("/camel/*"); 
    return mapping; 
} 

jedoch für Camel 2,19 planen wir machen diese einfacher und OOTB: https://issues.apache.org/jira/browse/CAMEL-10416

Und dann können Sie

from("servlet:foo") 
    .to("bean:foo"); 

tun Wo die URL HTTP dem Weg http:localhost:8080/camel/foo sein Kamel zu nennen

+1

Ich war den Pfad des Servlets gegangen, konnte es aber nicht zur Arbeit bringen. Verwenden Sie Ihren @Bean über DID jedoch. Nebenbei bemerkt: Sie müssen dem ServletRegistrationBean einen Namen geben und es muss "CamelServlet" sein, sonst funktioniert es nicht (Wenn ich es ändere, um "MyCamelServlet" zu sagen, wird es nicht initialisiert). Das war aus den Beispielen und der Dokumentation nicht ersichtlich. –

+1

Dieser Name muss mit dem Namen übereinstimmen, den Sie hier in der Tabelle finden: http://camel.apache.org/servlet –

Verwandte Themen