2016-07-08 6 views
0

Ich bin nicht sicher, was das Problem mit meiner kleinen Anwendung ist, wenn es auf den RouteBuilder oder in die Art und Weise ProducerTemplateApache Camel: Producer Vorlage hinzufügen nicht zu SEDA Endpunkt

Entweder wohnt, mein "Test message" nicht protokolliert, wenn Diese Anwendung wird ausgeführt.

Was kann hier schiefgehen?

+0

Könnte sein, weil Sie versäumt haben, den Körper mit einer geschweiften Klammer zu schließen $ {in.body? Oder ist es nur ein Typ, wenn Sie es hier eingefügt haben? – gnanagurus

+0

Nein, es ist nur ein Tippfehler, fürchte ich! – DJ180

Antwort

1

Es sieht nicht so aus, als ob Sie den Kontext erstellen und starten, was wahrscheinlich der Grund ist, warum die Nachricht Ihre Route nie erreicht. Hier ist ein Beispiel für den Einstieg:

https://examples.javacodegeeks.com/enterprise-java/apache-camel/apache-camel-hello-world-example/

import org.apache.activemq.camel.component.ActiveMQComponent; 
import org.apache.camel.CamelContext; 
import org.apache.camel.ProducerTemplate; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.impl.DefaultCamelContext; 

public class CamelHelloWorldExample { 
    public static void main(String[] args) throws Exception { 
     CamelContext context = new DefaultCamelContext(); 
     try { 
      context.addComponent("activemq", ActiveMQComponent.activeMQComponent("vm://localhost?broker.persistent=false")); 
      context.addRoutes(new RouteBuilder() { 
       @Override 
       public void configure() throws Exception { 
        from("activemq:queue:test.queue") 
        .to("stream:out"); 
       } 
      }); 
      ProducerTemplate template = context.createProducerTemplate(); 
      context.start(); 
      template.sendBody("activemq:test.queue", "Hello World"); 
      Thread.sleep(2000); 
     } finally { 
      context.stop(); 
     } 
    } 
} 

Hinweis context.start() und context.stop();

+0

Danke für die Antwort. Ich habe nicht bemerkt, dass Main.addRouteBuilder diese Route nicht mit einem CamelContext verbindet. Und jedes Mal, wenn Sie getOrCreateCamelContext() aufrufen, wird ein neues erstellt! Weißt du, was ist der Unterschied zwischen Main.addRouteBuilder und CamelContext.addRoutes? – DJ180

+0

@ DJ180, addRoutes fügt vorhandene Routen hinzu, die Sie in einer RouteBuilder-Klasse definiert haben. addRouteBuilder erstellt eine Route im laufenden Betrieb für Sie. Normalerweise erstellen Sie Ihre Routen in einer RouteBuilder-Klasse und fügen sie dann Ihrem Kontext hinzu. Sie können dies in reinem Java tun, oder wenn Sie eine Karaf-Umgebung bereitstellen, verwenden Sie Blueprint, um sie zu deklarieren und zum Kontext hinzuzufügen. –