ΕΝΟΤΗΤΑ 5 – ADDING A PROCESSOR IN A CAMEL ROUTE
Μέχρι τώρα απλά
χρησιμοποιούσαμε τα έτοιμα components
για να μεταφέρουμε μηνύματα από ένα
endpoint σε ένα άλλο endpoint.
Το processor
είναι ένα interface του
Camel που περιέχει μια και
μοναδική μέθοδο:
public void
process(Exchange exchange) throws Exception;
Αυτή η μέθοδο μας
επιτρέπει να αποκτήσουμε πλήρης πρόσβαση
στο μήνυμα και την ικανότητα να
τροποποιήσουμε ή το ίδιο το μήνυμα
(payload) ή ακόμα τα headers
του μηνύματος.
Ας δούμε προσθέσουμε
λοιπόν ένα processor στο απλό
παράδειγμα που χρησιμοποιήσαμε στην
προηγούμενη ενότητα:
Για να μπορέσουμε να
διαβάσουμε το μήνυμα που έρχεται στο
processor καλούμε το exchange
αντικείμενο. Το exchange
περιέχει το μήνυμα που εκτελείται
από το route και που
διαχειρίζεται το camel context. Αν
λοιπόν το exchange περιέχει
το μήνυμα, τότε σε οποιοδήποτε σημείο
του route θα μπορέσουμε να
το διαβάσουμε. Επίσης, όσο αφορά το
exchange, υπάρχουν δύο message
exchange patterns (MEPs) που μπορούμε να
ακολουθήσουμε:
InOnly
– Αυτό είναι one-way μήνυμα
όπου στέλνουμε το μήνυμα σε κάποιο
component χωρίς να περιμένουμε
απάντηση. Το JMS component συνήθως
χρησιμοποιείται σαν one-way.
InOut
– Εδώ έχουμε την κλασική ροή
ενός μηνύματος που είναι το request-response.
Για παράδειγμα, ένα
αίτημα σε ένα web service ακολουθεί
το request-response μοντέλο γιατί
ο client περιμένει για
απάντηση από τον server.
Τέλος, με την χρήση του
exchange θα μπορούσαμε να
ορίσουμε ένα exchange ID στο
μήνυμα που εκτελεί το route, ή
να ορίσουμε κάποιο άλλο property.
Σαν γενική περίληψη,
η ιδέα είναι ότι το exchange
περιέχει το μήνυμα και εμείς μπορούμε
να αποκτήσουμε πρόσβαση σε αυτό. Η
ερώτηση που απομένει να απαντήσουμε
είναι πως έχουμε πρόσβαση στο μήνυμα.
Όπως βλέπετε και από τον κώδικα, το
exchange αντικείμενο έχει
την μέθοδο getIn που μας
επιτρέπει να αποκτήσουμε πρόσβαση στο
εισερχόμενο μήνυμα. Ας αναλύσουμε λίγο
καλύτερα τον κώδικα τώρα που μιλήσαμε
για το exchange.
Το παράδειγμα μας,
ακολουθεί την λογική από την προηγούμενη
ενότητα, όπου έχουμε ένα Servlet
στο οποίο κάνουμε inject το
camelcontext και αφού δημιουργήσουμε
ένα αντικείμενο είδος ProducerTemplate
στέλνουμε ένα μήνυμα στο direct:start.
Στο route, το
direct:start δέχεται το μήνυμα
που έστειλε το Servlet και
αφού το μετατρέψουμε σε String
type, το στέλνουμε σε ένα processor.
Η μέθοδος process χρησιμοποιεί
το exchange αντικείμενο να
αποκτήσει πρόσβαση στο μήνυμα και με
την μέθοδο getIn απλά το
διαβάζουμε και το εκτυπώνουμε στο
terminal μαζί με το μήνυμα
“We have just received your message:”
Το τελευταίο component είναι
το vm:michail όπου παίζει το
ρόλο του queue.
Μιχάλης Κασάπογλου