ΕΝΟΤΗΤΑ 5 – ADDING A PROCESSOR IN A CAMEL ROUTE

Μέχρι τώρα απλά χρησιμοποιούσαμε τα έτοιμα components για να μεταφέρουμε μηνύματα από ένα endpoint σε ένα άλλο endpoint. 
  Όμως τις περισσότερες φορές χρειάζεται να επέμβουμε στο μήνυμα, είτε για να το διαβάσουμε είτε για να το τροποποιήσουμε, πριν το στείλουμε να συνεχίσει την εκτέλεση του μέσα στο camel route. Για να μπορέσουμε να εκτελέσουμε μια τέτοια πράξη πρέπει να χρησιμοποιήσουμε έναν processor.

Το 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.

 




Μιχάλης Κασάπογλου

Archive

Contact Form

Send