2016-06-20 18 views
0

Ich habe eine Frage, wie eine Bohne als uri wie folgt aufzurufen:Apache Camel: Verbrauchen von Bean

from("bean:MyBeanCall?method=beancallMethod(String1)") 

Die Consumer dynamisch sein muss und gibt die URI als String aus der Bohne. Innerhalb der Bean möchte ich auch die @Header Annotation verwenden, um einige Header-Eigenschaften hinzuzufügen.

Die Arbeits Bohne Aufruf sieht wie folgt aus:

.bean(MyBeanCall.class,"beancall('String1')"); 

Die Bohne sieht wie folgt aus:

public static void beancall(String test, @Header("theHeader") String header, @Header("JMSCorrelationID") String correlationID){...} 

Aber ich brauche den Anruf innerhalb der from() den Verbraucher mit dem String1 zu erzeugen und den Sockel .

Antwort

0

Aus der Dokumentation http://camel.apache.org/bean.html

Eine Bohne: Endpunkt kann nicht als Eingang für die Route festgelegt werden; d. h. Sie können nicht davon konsumieren, Sie können nur von einer eingehenden Nachricht Endpunkt an den Bean-Endpunkt als Ausgabe routen. Sie sollten also einen direkten: oder queue: endpoint als Eingabe verwenden.

Je nach Bedarf können Sie einen Timer, einen scheduleRoutingPolicy verwenden, eine SimpleScheduleRoutingPolicy oder eine CronScheduleRoutingPolicy die Strecke auszulösen.

+0

Hallo, erstens vielen Dank für Ihre Antwort. Ich habe herausgefunden, dass ich eine Instanz eines Objekts in der from URI verwenden kann. Zum Beispiel: von (instance.method ("String1")) Aber in diesem Fall habe ich keine Möglichkeit, die Header zu übergeben. Ich brauche auch das Kamelid und den Routeid. Es muss eine Lösung geben. Meine Anforderungen: Erstellen Sie den Consumer (für ein Thema) in einer Bean und den Consumer-String an die von URI. – sitnam

+0

Aber warum injizierst du nicht stattdessen die Bean als Eigenschaft von deiner blueprint.xml? Verwenden Sie dann die Annotation @BeanInject to String variable. Dann tun Sie einfach von (Variable) wo Variable Ihren URI enthält. –

0

Zunächst können Sie den Anwendungsfall erklären, warum Sie diese Dynamik benötigen?

Möchten Sie dies als Einstiegspunkt Ihres Projekts oder nur in einer Route sehen?

+0

Ich möchte die Möglichkeit haben, diese Workflows von überall zu erweitern. Dazu wird eine Datenbank verwendet und dabei an den Themen beteiligt, die ich nur zwei Argumente geben möchte (nameOfTopic und durableSubscriber oder nicht). Um festzustellen, ob der Abonnent bereits existiert, benötige ich die Kameliden und Routeiden. – sitnam