מדריך לשעועית מונעת הודעות ב- EJB

1. הקדמה

במילים פשוטות, Enterprise JavaBean (EJB) הוא רכיב JEE שפועל בשרת יישומים.

במדריך זה נדון בשעועית הודעות מונעות (MDB), האחראיות על טיפול בעיבוד הודעות בהקשר אסינכרוני.

MDBs הם חלק מ- JEE מאז המפרט EJB 2.0; EJB 3.0 הציג את השימוש בהערות, מה שמקל על יצירת אותם אובייקטים. כאן נתמקד בהערות.

2. רקע כלשהו

לפני שנצלול לפרטי שעועית המסרים, בואו נסקור כמה מושגים הקשורים להעברת הודעות.

2.1. מסרים

מסרים הם מנגנון תקשורת. באמצעות הודעות, תוכניות יכולות להחליף נתונים גם אם הן כתובות בשפות תוכנה שונות או שוכנות במערכות תפעוליות שונות.

הוא מציע פתרון משולב באופן רופף; לא המפיק או צרכן המידע צריך לדעת פרטים זה על זה.

לכן, הם אפילו לא צריכים להיות מחוברים למערכת ההודעות בו זמנית (תקשורת אסינכרונית).

2.2. תקשורת סינכרונית ואסינכרונית

במהלך תקשורת סינכרונית, המבקש ממתין עד לחזרת התגובה. בינתיים, תהליך המבקש נשאר חסום.

בתקשורת אסינכרונית, לעומת זאת, המבקש יוזם את הפעולה אך אינו חסום על ידה; המבקש יכול לעבור למשימות אחרות ולקבל את התגובה מאוחר יותר.

2.3. JMS

שירותי Java Message ("JMS") הוא API של Java התומך בהודעות.

JMS מספק עמית לעמית ומפרסם / מנוי להודעות העברת הודעות.

3. שעועית מונעת הודעה

MDB הוא רכיב שמופעל על ידי המכולה בכל פעם שמגיעה הודעה למערכת ההודעות. כתוצאה מכך, אירוע זה מפעיל את הקוד בתוך שעועית זו.

אנחנו יכולים לבצע הרבה משימות בתוך MDB onMessage () שיטה, שכן הצגת הנתונים שהתקבלו בדפדפן או ניתוח ושמירתם במסד נתונים.

דוגמא נוספת היא הגשת נתונים לתור אחר לאחר עיבוד כלשהו. הכל מסתכם בחוקים העסקיים שלנו.

3.1. מחזור חיים של שעועית מונעת הודעה

ל- MDB יש רק שתי מצבים:

  1. זה לא קיים על המכולה
  2. נוצר ומוכן לקבל הודעות

התלות, אם קיימת, מוזרקת מיד לאחר יצירת ה- MDB.

כדי לבצע הוראות לפני קבלת הודעות, עלינו להוסיף הערה לשיטה באמצעות @ javax.ejb.PostConstruct.

גם הזרקת תלות וגם @ javax.ejb.PostConstruct הביצוע קורה רק פעם אחת.

לאחר מכן, ה- MDB מוכן לקבל הודעות.

3.2. עִסקָה

ניתן להעביר הודעה ל- MDB במסגרת הקשר של העסקה.

כלומר כל הפעולות בתוך onMessage () שיטה הם חלק מעסקה אחת.

לכן, אם מתרחש החזרה, מערכת ההודעות מעבירה מחדש את הנתונים.

4. עבודה עם שעועית מונעת הודעה

4.1. יצירת הצרכן

כדי ליצור שעועית מונעת הודעה, אנו משתמשים @ javax.ejb.MessageDriven ביאור לפני הצהרת שם הכיתה.

כדי לטפל בהודעה הנכנסת, עלינו ליישם את onMessage () שיטת ה- MessageListener מִמְשָׁק:

@MessageDriven (activationConfig = {@ActivationConfigProperty (propertyName = "destination", propertyValue = "tutorialQueue"), @ActivationConfigProperty (propertyName = "destinationType", propertyValue = "javax.jms.Queue")}) ברמה הציבורית ReadMessMM בטל onMessage (הודעת הודעה) {TextMessage textMessage = (TextMessage) הודעה; נסה את {System.out.println ("ההודעה שהתקבלה:" + textMessage.getText ()); } לתפוס (JMSException e) {System.out.println ("שגיאה בעת ניסיון לצרוך הודעות:" + e.getMessage ()); }}}

מכיוון שמאמר זה מתמקד בהערות במקום בתיאורי .xml בהם נשתמש @ActivationConfigProperty ולא .

@ActivationConfigProperty הוא מאפיין בעל ערך מפתח המייצג תצורה זו. נשתמש בשני מאפיינים בפנים activationConfig, הגדרת התור וסוג האובייקט ש- MDB יצרכו.

בְּתוֹך onMessage () שיטה שאנו יכולים להעביר אליה פרמטר הודעה TextMessage, BytesMessage, MapMessage StreamMessage אוֹ ObjectMessage.

עם זאת, עבור מאמר זה, נסתכל רק על תוכן ההודעה על הפלט הסטנדרטי.

4.2. יצירת המפיק

כמוסבר בסעיף 2.1, שירותי היצרן והצרכן הם עצמאיים לחלוטין ואף ניתן לכתוב אותם בשפות תכנות שונות!

נפיק את ההודעות שלנו באמצעות Java Servlets:

@Override מוגן בטל doGet (HttpServletRequest req, HttpServletResponse res) זורק ServletException, IOException {String text = req.getParameter ("text")! = Null? req.getParameter ("טקסט"): "שלום עולם"; נסה (Context ic = new InitialContext (); ConnectionFactory cf = (ConnectionFactory) ic.lookup ("/ ConnectionFactory"); תור תור = (תור) ic.lookup ("תור / tutorialQueue"); חיבור חיבור = cf.createConnection ( );) {Session session = connection.createSession (false, Session.AUTO_ACKNOWLEDGE); מפרסם MessageProducer = הפעלה .createProducer (תור); connection.start (); הודעת TextMessage = session.createTextMessage (טקסט); publisher.send (הודעה); } לתפוס (NamingException | JMSException e) {res.getWriter () .println ("שגיאה בעת ניסיון לשלוח הודעה:" + e.getMessage ()); } res.getWriter () .println ("ההודעה נשלחה:" + טקסט); }

לאחר השגת ה- ConnectionFactory ו תוֹר מקרים, עלינו ליצור חיבור ו מוֹשָׁב.

כדי ליצור מושב, אנו קוראים createSession שיטה.

הפרמטר הראשון ב- createSession הוא בוליאני המגדיר אם הפגישה היא חלק מעסקה או לא.

הפרמטר השני משמש רק כאשר הראשון הוא שֶׁקֶר. זה מאפשר לנו לתאר את שיטת האישור החלה על הודעות נכנסות ולוקחת את הערכים של מושב. AUTO_ACKNOWLEDGE, מושב. CLIENT_ACKNOWLEDGE ו מושב.DUPS_OK_ACKNOWLEDGE.

כעת אנו יכולים להתחיל את החיבור, ליצור הודעת טקסט על אובייקט ההפעלה ולשלוח את ההודעה שלנו.

צרכן, הקשור לאותו תור יקבל הודעה ויבצע את המשימה האסינכרונית שלו.

כמו כן, מלבד להסתכל למעלה JNDI אובייקטים, כל הפעולות בבלוק הניסיון שלנו עם משאבים מוודאות שהחיבור נסגר אם JMSException נתקל בשגיאה, כגון ניסיון להתחבר לתור שאינו קיים או ציון מספר יציאה שגוי לחיבור.

5. בדיקת שעועית מונעת המסר

שלח הודעה דרך לקבל שיטה ב SendMessageServlet, כמו ב:

//127.0.0.1:8080/producer/SendMessageServlet?text=Txt לשלוח

כמו כן, הסרוולט שולח "שלום עולם" לתור אם לא נשלח פרמטרים כמו ב- //127.0.0.1:8080/producer/SendMessageServlet.

6. מסקנה

שעועית מונעת הודעות מאפשרת ליצור פשוט יישום מבוסס תור.

לָכֵן, MDB מאפשרים לנו לפרק את היישומים שלנו לשירותים קטנים יותר עם אחריות מקומית, המאפשרת מערכת מודולרית ומצטברת הרבה יותר שיכולה להתאושש מכשלים במערכת.

כמו תמיד נגמר הקוד ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found