תחילת העבודה עם אביב JMS

1. סקירה כללית

Spring מספקת מסגרת שילוב JMS שמפשטת את השימוש ב- JMS API. מאמר זה מציג את מושגי היסוד של שילוב כזה.

2. תלות של Maven

על מנת להשתמש ב- JMS של Spring ביישום שלנו, עלינו להוסיף חפצים נחוצים ב- pom.xml:

 org.springframework spring-jms 4.3.3.RELEASE 

הגרסה החדשה ביותר של החפץ נמצאת כאן.

3. ה JmsTemplate

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

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

החל באביב 4.1, ה- JmsMessagingTemplate בנוי על גבי JmsTemplate המספק אינטגרציה עם הפשטת המסרים, כלומר org.springframework.messaging.Message. זה, בתורו, מאפשר לנו ליצור מסר לשליחה באופן כללי.

4. ניהול חיבורים

על מנת להתחבר ולהיות מסוגלים לשלוח / לקבל הודעות, עלינו להגדיר א ConnectionFactory.

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

האביב מספק 2 סוגים של ConnectionFactory:

  • מפעל יחיד - הוא יישום של ConnectionFactory ממשק, שיחזיר את אותו החיבור על כולם createConnection() מתקשר ומתעלם משיחות אל סגור()
  • CachingConnectionFactory מרחיב את הפונקציונליות של SingleConnectionFactory ומוסיף משפר את זה בעזרת מטמון של מושבים, MessageProducers, ו הודעות צרכנים

5. ניהול יעדים

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

אביב מספק פתרונות גנריים כמו DynamicDestinationResolver ומפתחים ספציפיים כגון JndiDestinationResolver.

ה JmsTemplate יאציל את הרזולוציה של שם היעד לאחת היישומים המבוססים על בחירתנו.

זה גם יספק נכס שנקרא defaultDestination - שישמשו עם לִשְׁלוֹחַ ו לְקַבֵּל פעולות שאינן מתייחסות ליעד ספציפי.

6. המרת מסר

אביב JMS יהיה שלם ללא תמיכת ממירי מסרים.

אסטרטגיית המרת ברירת המחדל בה משתמשת JmsTemplate לשניהם ConvertAndSend () ו ReceiveAndConvert () הפעולות הן ממיר SimpleMessage מעמד.

ממיר SimpleMessageConverter מסוגל להתמודד הודעות טקסט, BytesMessages, MapMessages, ו ObjectMessages. כיתה זו מיישמת את MessageConverter מִמְשָׁק.

חוץ מ ממיר SimpleMessage, אביב JMS מספק כמה אחרים MessageConverter שיעורים מהקופסה כמו MappingJackson2MessageConverter, MarshallingMessageConverter, MessagingMessageConverter.

יתר על כן, אנו יכולים ליצור פונקציונליות להמרת הודעות מותאמת אישית פשוט על ידי יישום ה- MessageConverter ממשקים toMessage () ו FromMessage () שיטות.

הבה נראה קטע קוד לדוגמה על יישום מותאם אישית MessageConverter,

מחלקה ציבורית SampleMessageConverter מיישם MessageConverter {אובייקט ציבורי מ- Message (הודעת הודעה) זורק JMSException, MessageConversionException {// ...} הודעה ציבורית toMessage (אובייקט אובייקט, מושב מושב) זורק JMSException, MessageConversionException {// ...}}

7. לדוגמא JMS אביב

בחלק זה נראה כיצד להשתמש ב- JmsTemplate כדי לשלוח ולקבל הודעות.

שיטת ברירת המחדל לשליחת ההודעה היא JmsTemplate.send (). יש לו שני פרמטרים עיקריים אשר הפרמטר הראשון הוא יעד ה- JMS והפרמטר השני הוא יישום של MessageCreator. תבנית ה- Jms משתמש ב- MessageCreatorשיטת ההתקשרות createMessage () לבניית המסר.

JmsTemplate.send () טוב לשליחת הודעות טקסט רגילות אך על מנת לשלוח הודעות מותאמות אישית, JmsTemplate יש שיטה אחרת הנקראת גonvertAndSend ().

אנו יכולים לראות להלן את יישום השיטות הבאות:

מחלקה ציבורית SampleJmsMessageSender {פרטי JmsTemplate jmsTemplate; תור פרטי לתור; // סטרים עבור jmsTemplate & queue public void simpleSend () {jmsTemplate.send (queue, s -> s.createTextMessage ("שלום תור שלום")); }
 sendMessage בטל ציבורי (עובד שכיר) {System.out.println ("שולח הודעות Jms:" + עובד); מפת מפה = HashMap חדש (); map.put ("שם", employee.getName ()); map.put ("גיל", employee.getAge ()); jmsTemplate.convertAndSend (מפה); }}

להלן מחלקת מקלט ההודעות, אנו קוראים לה POJO (MDP) מונחה הודעות. אנו יכולים לראות את הכיתה SampleListener מיישם את MessageListener ממשק ומספק את הטמעת הטקסט הספציפית לשיטת הממשק onMessage ().

חוץ מ onMessage () השיטה, שלנו SampleListener בכיתה נקראת גם שיטה receiveAndConvert () לקבלת הודעות מותאמות אישית:

מחלקה ציבורית SampleListener מיישם MessageListener {public JmsTemplate getJmsTemplate () {return getJmsTemplate (); } חלל ציבורי ב- Message (הודעת הודעה) {if (מופע הודעה של TextMessage) {נסה {String msg = ((TextMessage) הודעה) .getText (); System.out.println ("ההודעה נצרכה:" + msg); } לתפוס (JMSException לשעבר) {לזרוק RuntimeException חדש (לשעבר); }} אחר {זרוק IllegalArgumentException ("שגיאת הודעה"); }} עובד מקבל ציבור מסר () זורק את JMSException {Map map = (Map) getJmsTemplate (). receiveAndConvert (); להחזיר עובד ((מחרוזת) map.get ("שם"), (שלם) map.get ("גיל")); }}

ראינו איך ליישם MessageListener ולמטה אנו רואים את התצורה בהקשר של יישום האביב:

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

8. תצורה בסיסית עם הערות Java

ה @JmsListener היא ההערה היחידה הנדרשת להמרת שיטה של ​​שעועית רגילה לנקודת סיום של מאזין JMS. Spring JMS מספק הערות רבות נוספות כדי להקל על יישום ה- JMS.

אנו יכולים לראות כמה משיעורי הדוגמה המבוארים להלן:

@JmsListener (destination = "myDestination") פומבי ריק SampleJmsListenerMethod (סדר הודעה) {...}

על מנת להוסיף מספר מאזינים לשיטה אחת עלינו רק להוסיף מספר מרובים @JmsListener ביאורים.

עלינו להוסיף את @EnableJms ביאור לאחד משיעורי התצורה שלנו לתמיכה ב- @JmsListener שיטות ביאור:

@Configuration @EnableJms class class AppConfig {@Bean public DefaultJmsListenerContainerFactory jmsListenerContainerFactory () {DefaultJmsListenerContainerFactory מפעל = DefaultJmsListenerContainerFactory חדש (); factory.setConnectionFactory (connectionFactory ()); מפעל החזרה; }}

9. מטפל בשגיאות

אנו יכולים גם להגדיר מטפל שגיאות מותאם אישית עבור מיכל מאזין ההודעות שלנו.

בואו קודם ניישם את org.springframework.util.ErrorHandler מִמְשָׁק:

המחלקה הציבורית @Service SampleJmsErrorHandler מיישמת את ErrorHandler {// ... logger @Override public void handleError (Throwable t) {LOG.warn ("בטיפול שגיאות jms המוגדר כברירת מחדל ..."); LOG.error ("הודעת שגיאה: {}", t.getMessage ()); }}

שים לב שדרסנו את handleError () שיטה, אשר פשוט רושם את הודעת השגיאה.

ואז עלינו להתייחס לשירות מטפל השגיאות שלנו ב- DefaultJmsListenerConnectionFactory משתמש ב setErrorHandler () שיטה:

@Bean ציבורי DefaultJmsListenerContainerFactorybjmsListenerContainerFactory () {DefaultJmsListenerContainerFactory מפעל = חדש DefaultJmsListenerContainerFactory (); factory.setConnectionFactory (connectionFactory ()); factory.setErrorHandler (sampleJmsErrorHandler); מפעל החזרה; }

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

באופן אופציונלי, אנו יכולים גם להגדיר את מטפל השגיאות באמצעות תצורות XML ישנות רגילות על ידי עדכון שלנו appContext.xml:

10. מסקנה

במדריך זה דנו בתצורה ובמושגים הבסיסיים של Spring JMS. הסתכלנו גם בקצרה על האביב JmsTemplate שיעורים המשמשים לשליחה וקבלה של הודעות.

אתה יכול למצוא את הטמעת הקוד בפרויקט GitHub.


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