2010-01-22 15 views
26

Ich habe Schwierigkeiten, meinen Kopf um das Konzept zu wickeln.Apache Camel Produzenten und Verbraucher

Ich versuche, einen Endpunkt zu implementieren, der auf einem TCP-Port für eingehende Nachrichten in einem proprietären Format überwacht, die dann die Nachricht transformieren würde und Kamel übernehmen die Weiterleitung und Routing.

Habe ich richtig verstanden, dass der Producer verantwortlich für das Senden von Nachrichten in die Endpoint und die Consumer empfängt sie von diesem Endpunkt?

Bei der Untersuchung der Schnittstellen konnte ich den Nachrichtenfluss zwischen diesen Objekten, insbesondere im Consumer-Bereich, nicht feststellen. Consumer definiert nur start() und stop() Methoden ...

Wenn einen Test auf einem Skelett Implementierung einrichten, aufgerufen CamelcreateProducer() auf dem Endpunkt und process() auf dem Hersteller-Objekt. Danach kehrte es zurück, ohne irgendetwas mit dem Verbraucher oder dem damit verbundenen Prozessor zu tun.

Könnte jemand mich in die richtige Richtung?

Antwort

17

Habe ich es schließlich, indem man die Stream-Komponente aus.

Stellt sich heraus, dass ich den Fehler gemacht habe, über den Endpunkt als etwas Zentral zu denken, durch das alles gehen muss.

Die einfache Antwort ist, dass der Verbraucher Daten von einem externen System empfängt (in meinem Fall auf einem Server-Socket) und der Hersteller sendet Daten an das externe System.

Da mein Endpunkt schreibgeschützt ist (er wird nicht als endgültiges Ziel des Camel-Routing-Prozesses verwendet), benötige ich keinen Producer (er sollte eine RuntimeException auslösen, wenn das System aufgrund von Fehlkonfiguration). Ein passendes Beispiel wäre der Camel-Atom-Endpunkt - Sie können Feeds lesen, aber (ab 1.6.0) können Sie keinen veröffentlichen.

Ebenso benötigen Sie nur einen Hersteller für einen schreibgeschützten Endpunkt, der keine Daten von einem externen System empfängt (z. B. Protokollierung).

36

Es ist wichtig, sich daran zu erinnern, dass ein Endpoint, erstellt von einem Component (d Endpoint Factory), bei entweder Ende eines Camel Route sitzen kann. Wenn Sie die Komponente Komponente am Anfang einer Route platzieren, muss eine Implementierung des Consumer Teils der Komponente vorliegen. Dies macht die Arbeit der Umwandlung der spezifischen Eingabe/Anfrage (wie eine HTTP-Anfrage) in etwas Generisches - ein Camel Exchange - das kann eine Route Route.Wenn Sie die Komponente am Ende einer Route setzen, müssen Sie eine Implementierung von Producer haben. Der Producer erledigt die Arbeit, die Exchange vom Ende einer Route zu nehmen und sie in etwas Spezifisches umzuwandeln (wie eine JMS Nachricht).

Ich finde die Fuse ESB-Dokumentation besser (im Allgemeinen) als die Apache Camel website. Von der Fuse ESB Component page:

Consumer Endpunkte Anfragen verbrauchen. Sie erscheinen immer am Anfang einer Route und sie kapseln den Code ein, der für das Empfangen von eingehenden Anfragen und das Versenden ausgehender Antworten verantwortlich ist.

Producer Endpunkte Anfragen produzieren. Sie erscheinen immer am Ende der Route und sie kapseln den Code, der für das Versenden von ausgehenden Anforderungen und das Empfangen eingehender Antworten zuständig ist.


enter image description here

+6

Schöne, klare Erklärung Dank. Die Begriffe sind oft kontraintuitiv, da ein typischer Benutzer von camel eher in routes und messageExchanges denkt, als eine neue camel-Komponente zu erstellen. Aus der Sicht eines messageExchange sind die Begriffe falsch herum. Ein Consumer erstellt eine NachrichtExchange, während ein Producer eine NachrichtExchange verwendet. –

+0

Als Neuling zu Camel, bin ich wirklich verwirrt durch diese Antwort. Wenn ich auf die Schnittstelle "org.apache.camel.Producer" schaue, sind die einzigen Verträge, die es spezifiziert, "createExchange" -Methoden. Und wenn man sich etwas wie den 'EventDrivenPollingConsumer' ansieht, ist das einzige, was mit einem Exchange geschieht,' process' it. Passiert ein Exchange nicht auf einer Route - dafür arbeiten Prozessoren, das war mein Eindruck. – Snekse

+0

@Snekse Der beschreibende Teil der Antwort sagt genau dies. Aber auf jeden Fall glaube ich nicht, dass diese Technik für ein konzeptionelles Verständnis von Produzenten und Konsumenten von großer Bedeutung ist. – chrisjleu