Προγραμματισμός

Εφαρμόστε ένα προσαρμόσιμο ESB με Java

Σκεφτείτε μια επιχείρηση στην οποία έχετε ετερογενείς εφαρμογές, πιθανώς παραδοτέες από διαφορετικές ομάδες, που πρέπει να αλληλεπιδρούν μεταξύ τους αλλά έχουν τους ακόλουθους περιορισμούς:

  • Κάθε εφαρμογή δεν είναι απαραίτητα κατασκευασμένη με την ίδια τεχνολογία και ενδέχεται να μην μιλάει στους άλλους χρησιμοποιώντας τον εγγενή μηχανισμό επίκλησης, π.χ. μια εφαρμογή J2EE και .Net εφαρμογή.
  • Κατά προτίμηση, κάθε εφαρμογή δεν πρέπει να μετατρέπει τα αιτήματά της σε μορφή κατανοητή από την εφαρμογή προορισμού. Επιπλέον, η επιχείρηση διαθέτει πολλές εφαρμογές που χρησιμοποιούν την εφαρμογή-στόχο.
  • Τα στοιχεία της υπηρεσίας πρέπει να χρησιμοποιούν έναν μηχανισμό επίκλησης ή αιτήματος που είναι φυσικό για αυτούς. Για παράδειγμα, μια υπάρχουσα εφαρμογή J2EE μπορεί να δέχεται αιτήματα μόνο μέσω της υπηρεσίας Java Message Service (JMS).
  • Η επιχείρηση κινείται προς μια αρχιτεκτονική όπου μια εφαρμογή αφορά μόνο ένα, τι γνωρίζει και, δύο, τι πρέπει να περάσει ως παράμετροι όταν θέλει να αποκτήσει τις υπηρεσίες μιας άλλης εφαρμογής εντός της επιχείρησης.

Άλλοι περιορισμοί ενδέχεται να απαιτούν από εσάς να έχετε μια υποδομή που επιτρέπει στις ετερογενείς εφαρμογές να ενσωματώνονται απρόσκοπτα χωρίς να αλλάξετε το σχεδιασμό τους. Ένα επιχειρησιακό λεωφορείο εξυπηρέτησης (ESB) είναι ένας τρόπος υλοποίησης μιας τέτοιας αρχιτεκτονικής ενοποίησης επιχειρήσεων.

Παρόλο που κάθε επιχείρηση πιθανότατα θα δημιουργήσει το ESB με τον δικό της μοναδικό τρόπο, είναι σημαντικό να έχουμε κατά νου την ευελιξία κατά την εξέταση του ορισμού ενός ESB. Δεν υπάρχει σταθερή προσέγγιση για την οικοδόμηση μιας. Η ιδέα είναι να υπάρχει ένα επίπεδο συνδεσιμότητας που βελτιστοποιεί τις αλληλεπιδράσεις μεταξύ των καταναλωτών υπηρεσιών και των παρόχων υπηρεσιών, ένα που μπορεί να ανταποκριθεί σε συμβάντα, μηνύματα ή προσανατολισμένα σε υπηρεσίες περιβάλλοντα

Αυτό το άρθρο περιγράφει μια προσέγγιση για τη δημιουργία ενός επεκτάσιμου ESB που βασίζεται σε Java και υποστηρίζει τις πιο κοινές λειτουργικές απαιτήσεις ESB.

Κοινές απαιτήσεις ESB

Οι κοινές απαιτήσεις ενός ESB είναι επίσης τα πιο συχνά χρησιμοποιούμενα χαρακτηριστικά του:

  1. Δρομολόγηση: Το ESB πρέπει να παρέχει έναν αποτελεσματικό και ευέλικτο μηχανισμό δρομολόγησης.
  2. Μεταμόρφωση: Ένα στοιχείο υπηρεσίας δεν πρέπει να γνωρίζει τη μορφή αιτήματος της υπηρεσίας στόχου που μπορεί να επικαλεστεί. Με βάση τον αιτούντα και τον στόχο, το ESB θα πρέπει να μπορεί να εφαρμόζει τον κατάλληλο μετασχηματισμό στο αίτημα, ώστε ο στόχος να μπορεί να το κατανοήσει.
  3. Πολλαπλή μεταφορά μεταφοράς: Μια εφαρμογή ESB που μιλά μόνο JMS ή μόνο υπηρεσίες Web δεν έχει μεγάλη αξία. Θα πρέπει να είναι αρκετά επεκτάσιμο ώστε να υποστηρίζει πολλαπλά πρωτόκολλα μηνυμάτων ανάλογα με τις ανάγκες της επιχείρησης.
  4. Ασφάλεια: Εάν χρειαστεί, το ESB θα πρέπει να επιβάλλει έλεγχο ταυτότητας και εξουσιοδότηση για πρόσβαση σε διαφορετικά στοιχεία υπηρεσίας.

Το σχήμα 1 δείχνει τα κύρια αρχιτεκτονικά στοιχεία του ESB. Έχει τρία ευρύχωρα διαμερίσματα:

  1. Δέκτης: Ένα ESB εκθέτει διαφορετικές διεπαφές για να επιτρέπει στις εφαρμογές-πελάτες να στέλνουν μηνύματα στο ESB. Για παράδειγμα, ένας servlet θα μπορούσε να λαμβάνει τις αιτήσεις HTTP για το ESB. Ταυτόχρονα, θα μπορούσατε να έχετε ένα MDB (bean-driven bean) να ακούει έναν προορισμό JMS όπου οι εφαρμογές πελατών μπορούν να στέλνουν μηνύματα.
  2. Πυρήνας: Αυτό είναι το κύριο μέρος της εφαρμογής του ESB. Διαχειρίζεται τη δρομολόγηση και τον μετασχηματισμό και εφαρμόζει ασφάλεια. Συνήθως, αποτελείται από ένα MDB που λαμβάνει τα εισερχόμενα αιτήματα και στη συνέχεια, βάσει του περιβάλλοντος μηνύματος, εφαρμόζει τον κατάλληλο μετασχηματισμό, δρομολόγηση και ασφάλεια. Λεπτομέρειες σχετικά με τη δρομολόγηση, τη μεταφορά, τον μετασχηματισμό και τις πληροφορίες ασφαλείας μπορούν να καθοριστούν σε ένα έγγραφο XML (θα συζητηθεί σύντομα).
  3. Αποστολέας: Όλοι οι χειριστές εξερχόμενων μεταφορών εμπίπτουν σε αυτό το τμήμα του ESB. Μπορείτε να συνδέσετε οποιονδήποτε αυθαίρετο χειριστή μεταφοράς (email, fax, FTP κ.λπ.) στο ESB.

Όλα αυτά τα μέρη του ESB είναι κολλημένα από ένα έγγραφο XML που απαριθμεί όλες τις διαδρομές στις οποίες λειτουργεί το ESB. Οι διαφορετικοί διαχειριστές μεταφορών, οι μετασχηματιστές και οι πολιτικές επανάληψης και η σύνδεσή τους με διαφορετικές διαδρομές συνδέονται όλα μέσω αυτού του εγγράφου XML.

ESBConfiguration.xml

Η λίστα XML—ESBConfiguration.xml, που εμφανίζεται παρακάτω — μας δίνει κάποια ιδέα για τη λειτουργία του ESB. Τα κύρια στοιχεία ενδιαφέροντος για ESBConfiguration.xml ειναι τα εξης:

  1. Φασόλια: Αυτό το στοιχείο περιέχει μηδέν ή περισσότερα Φασόλι στοιχεία.
  2. Φασόλι: Αυτό το στοιχείο καθορίζει βασικά τον τρόπο δημιουργίας και διαμόρφωσης α Φασόλι τάξη. Έχει τα ακόλουθα χαρακτηριστικά:
    • όνομα: Μοναδικό όνομα που μπορεί να χρησιμοποιηθεί για αναφορά σε αυτό το φασόλι.
    • όνομα τάξης: Πλήρως αναγνωρισμένο όνομα της κατηγορίας φασολιών.
    Κάθε φασόλι μπορεί να έχει μηδέν ή περισσότερα Ιδιοκτησία στοιχεία ως παιδιά. Καθε Ιδιοκτησία το στοιχείο έχει ένα χαρακτηριστικό όνομα που ταυτοποιεί και ένα θυγατρικό στοιχείο τύπου αξία που κρατά την τιμή ιδιοκτησίας. Αυτές οι ιδιότητες είναι στην πραγματικότητα τα μέλη τύπου JavaBeans της κλάσης που μπορούν να διαμορφώσουν την κατηγορία bean.
  3. Επανάληψη πολιτικής: Αυτό το στοιχείο περιέχει μηδέν ή περισσότερα Επανάληψη πολιτικής παιδιά.
  4. Επανάληψη πολιτικής: Αυτό το στοιχείο καθορίζει την πολιτική επανάληψης για μια δεδομένη διαδρομή. Έχει ένα χαρακτηριστικό όνομα που μπορεί να χρησιμοποιηθεί για αναφορά σε αυτό. Έχει δύο θυγατρικά στοιχεία που ονομάζονται MaxRetries και Επανάληψη.
  5. Διαδρομή: Ο Διαμόρφωση Esb Το στοιχείο ρίζας μπορεί να περιέχει μηδενικά ή περισσότερα θυγατρικά στοιχεία αυτού του τύπου. Αντιπροσωπεύει βασικά μια διαδρομή για το ESB. Έχει τα ακόλουθα χαρακτηριστικά:
    • όνομα: Μοναδικό όνομα που μπορεί να χρησιμοποιηθεί για αναφορά σε αυτήν τη διαδρομή.
    • retryPolicyRef: Αναφορά στην πολιτική επανάληψης. Πρέπει να ταιριάζει με το Επανάληψη πολιτικής στοιχεία όνομα Χαρακτηριστικό.
    • μετασχηματιστήςRef: Αναφορά σε ένα φασόλι που αντιπροσωπεύει τον μετασχηματιστή. Πρέπει να ταιριάζει με το Φασόλι στοιχεία όνομα Χαρακτηριστικό.
    ο Διαδρομή Το στοιχείο μπορεί να έχει ένα ή περισσότερα θυγατρικά στοιχεία τύπου TransportHandlerRef. Αυτό το παιδί βασικά δείχνει ένα φασόλι που αντιπροσωπεύει έναν κατάλληλο χειριστή μεταφοράς που πρέπει να χρησιμοποιηθεί για αυτήν τη διαδρομή και το όνομα της δημόσιας μεθόδου αυτού του φασολιού που πρέπει να καλείται για την αποστολή του μηνύματος. Προαιρετικά, το Διαδρομή στοιχείο μπορεί να έχει ένα DeadLetterDestination παιδί που δείχνει μια άλλη διαδρομή που αντιπροσωπεύει έναν προορισμό νεκρού γράμματος.

Ένα δείγμα εγγράφου XML, EsbConfiguration.xml, εμφανίζεται παρακάτω:

                              qcf-1 myCreditQueue //www.tax.com/calc file: /// C: /temp/esb/transform/xsl/credit.xsl file: /// C: / temp / esb / transform / custom / configManager. ιδιότητες qcf-1 Redelivery.Queue qcf-1 System.DL.Queue qcf-1 System.Error.Queue qcf-1 Redelivery.Request.Topic 10 100 10 500 

Συμπεριφορά ESB

ο ESBConfiguration.xml Το έγγραφο υπαγορεύει τη συμπεριφορά του ESB. ο Δρομολογητής EsbRouter Το MDB φορτώνει αυτό το XML από μια τοποθεσία που καθορίζεται στον περιγραφέα ανάπτυξης. Οι πληροφορίες που περιέχει στη συνέχεια οργανώνονται σε μια βάση δεδομένων που απεικονίζεται στο σχήμα 2 παρακάτω.

ο Δρομολογητής EsbRouter χρησιμοποιεί αυτές τις πληροφορίες (μέσω EsbConfigManager) για να αποκρυπτογραφήσετε την κατάλληλη διαδρομή, τον μετασχηματισμό, εάν υπάρχει, να εφαρμοστεί, τον έλεγχο εξουσιοδότησης ασφαλείας, κ.λπ. ως μεταφορά πολλαπλών προτύπων μηνυμάτων και μετασχηματισμός μηνυμάτων) του ESB, επιτρέποντάς του έτσι να είναι εξαιρετικά επεκτάσιμο και προσαρμόσιμο.

Όπως δείχνει το διάγραμμα τάξης, δύο σημαντικές διεπαφές βρίσκονται στο σχεδιασμό ESB: TransformHandler και Μεταφορέας Χειριστής. Σας επιτρέπουν να γράψετε μια συγκεκριμένη εφαρμογή μετατροπής και μεταφοράς για δρομολογημένα μηνύματα. Αυτές οι τάξεις υλοποίησης μπορούν στη συνέχεια να συνδεθούν με τις διαδρομές μέσω Φασόλι στοιχεία σε Διαμόρφωση Esb. Για παράδειγμα, στο δείγμα EsbConfiguration.xml έγγραφο, ο ακόλουθος ορισμός φασολιών καθορίζει τον χειριστή μεταφοράς:

   myQCF myCreditQueue 

Αυτός ο χειριστής μεταφοράς μπορεί στη συνέχεια να αναφέρεται στο α Διαδρομή κόμβος εισάγοντας ένα Μεταφορέας Χειριστής παιδί σε αυτό αρέσει:

Σημείωση
Η προσέγγιση που περιγράφεται σε αυτό το άρθρο χρησιμοποιεί διεπαφές Java για τον καθορισμό των χειριστών μεταφοράς και μετασχηματισμού. Έτσι, κάθε νέος χειριστής θα πρέπει να εφαρμόσει την απαιτούμενη διεπαφή, η οποία μπορεί να φαίνεται ενοχλητική. Μπορείτε εύκολα να τροποποιήσετε το EsbConfigManager να χρησιμοποιήσετε Dependency Injection για να καλέσετε οποιαδήποτε αυθαίρετη μέθοδο μιας κλάσης υλοποίησης, εξαλείφοντας έτσι την ανάγκη εφαρμογής μιας διεπαφής. Αλλά από το Δρομολογητής EsbRouter περνά πάντα α javax.jms. Μήνυμα Για παράδειγμα, η κλάση εφαρμογής χειριστή πρέπει να χρησιμοποιεί τον τύπο javax.jms. Μήνυμα ΤΕΛΟΣ παντων.