מסרים עם AMQP באביב

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

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

2. תקשורת מבוססת מסרים

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

במקרה של העברת הודעות בין יישומים שנכתבו בג'אווה, נעשה שימוש נפוץ ב- JMS (Java Message Service) API. לצורך יכולת פעולה הדדית בין ספקים ופלטפורמות שונות, לא נוכל להשתמש בלקוחות JMS ובמתווכים. זה המקום שבו AMQP שימושי.

3. AMQP - פרוטוקול תור להודעות מתקדם

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

3.1. במה Amqp שונה מ- Jms

מכיוון ש- AMQP הוא תקן פרוטוקול בינארי ניטרלי, ניתן לכתוב ספריות בשפות תכנות שונות ולהפעיל אותן בסביבות שונות.

אין נעילת פרוטוקול מבוסס ספק, כפי שקורה בעת מעבר מתווך JMS אחד למשנהו. לפרטים נוספים עיין ב- JMS לעומת AMQP והבנת AMQP. חלק מהמתווכים הנפוצים ב- AMQP הם RabbitMQ, OpenAMQ ו- StormMQ.

3.2. גופי AMQP

בקצרה, AMQP מורכב מחילופים, תורים וכריכות:

  • חילופי דברים הם כמו סניפי דואר או תיבות דואר ולקוחות מפרסמים הודעה לבורסת AMQP. ישנם ארבעה סוגי חליפין מובנים
    • החלפה ישירה - מנתב הודעות לתור על ידי התאמת מפתח ניתוב מלא
    • Fanout Exchange - מנתב הודעות לכל התורים הקשורים אליו
    • החלפת נושאים - מנתב הודעות למספר תורים על ידי התאמת מפתח ניתוב לתבנית
    • חילופי כותרות - מנתב הודעות על בסיס כותרות הודעות
  • תורים מחויבים להחלפה באמצעות מפתח ניתוב
  • הודעות נשלחים למרכזיה עם מפתח ניתוב. המרכזית מפיצה עותקים של הודעות לתורים

לפרטים נוספים, עיין במושגי AMQP ובטופולוגיות ניתוב.

3.3. אביב AMQP

אביב AMQP כולל שני מודולים: אביב- amqp ו אביב-ארנב. יחד, מודולים אלה מספקים הפשטות ל:

  • ישויות AMQP - אנו יוצרים ישויות עם ה- הודעה, תור, כריכה והחלפה שיעורים

  • ניהול חיבורים - אנו מתחברים למתווך RabbitMQ שלנו באמצעות CachingConnectionFactory
  • פרסום הודעות - אנו משתמשים ב- RabbitTemplate כדי לשלוח הודעות
  • צריכת הודעות - אנו משתמשים ב- @RabbitListener לקרוא הודעות מתור

4. הגדר מתווך Rabbitmq

אנו זקוקים למתווך של RabbitMQ שניתן להתחבר אליו. הדרך הפשוטה ביותר לעשות זאת היא באמצעות Docker כדי להביא ולהריץ תמונת RabbitMQ עבורנו:

docker run -d -p 5672: 5672 -p 15672: 15672 - שם my-rabbit rabbitmq: 3-management

אנו חושפים את יציאת 5672 כדי שהיישום שלנו יוכל להתחבר ל- RabbitMQ.

בנוסף אנו חושפים את יציאת 15672 כדי שנוכל לראות מה מתווך RabbitMQ שלנו עושה דרך ממשק המשתמש הניהולי: // localhost: 15672 או ה- API של HTTP: //localhost:15672/api/index.html.

5. יצירת אפליקציית ה- Amqp האביבית שלנו

אז בואו ניצור את היישום שלנו לשלוח ולקבל פשוט "שלום עולם!" הודעה באמצעות שימוש ב- Spring AMQP.

5.1. תלות Maven

על מנת להוסיף את אביב- amqp ו אביב-ארנב מודולים לפרויקט שלנו, אנו מוסיפים את קפיץ-אתחול-starter-amqp תלות שלנו pom.xml:

  org.springframework.boot spring-boot-starter-amqp 2.2.2.RELEASE 

אנו יכולים למצוא את הגרסה האחרונה ב- Maven Central.

5.2. מתחבר למתווך Rabbitmq שלנו

נשתמש בתצורה האוטומטית של Spring Boot ליצירת שלנו ConnectionFactory, RabbitTemplate, ו RabbitAdmin שעועית. כתוצאה מכך, אנו מקבלים חיבור למתווך RabbitMQ שלנו ביציאה 5672 באמצעות שם המשתמש והסיסמה המוגדרים כברירת מחדל של "אורח". אז אנחנו פשוט מציינים את בקשתנו עם @ SpringBootApplication:

@SpringBootApplication מחלקה ציבורית HelloWorldMessageApp {// ...}

5.3. צור את התור שלנו

על מנת ליצור את התור שלנו, אנו פשוט מגדירים שעועית מסוג תוֹר.RabbitAdmin ימצא את זה ויקשר אותו להחלפת ברירת המחדל באמצעות מפתח ניתוב של "myQueue":

@Bean תור ציבורי myQueue () {החזר תור חדש ("myQueue", שקר); }

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

5.4. שלח את ההודעה שלנו

בואו להשתמש ב RabbitTemplate לשלוח שלנו "שלום עולם!" הוֹדָעָה:

rabbitTemplate.convertAndSend ("myQueue", "שלום עולם!");

5.5. צרכ את המסר שלנו

אנו ניישם צרכן הודעות על ידי הערת שיטה באמצעות @RabbitListener:

@RabbitListener (תורים = "myQueue") האזנה בטלנית ציבורית (מחרוזת פנימה) {System.out.println ("ההודעה נקראה מ- myQueue:" + in); }

6. הפעלת היישום שלנו

ראשית, אנו מתחילים את המתווך של RabbitMQ:

docker run -d -p 5672: 5672 -p 15672: 15672 - שם my-rabbit rabbitmq: 3-management

לאחר מכן אנו מריצים את יישום אתחול האביב HelloWorldMessage.java, ביצוע ה- רָאשִׁי() שיטה:

אביב-אתחול mvn: הפעל -Dstart-class = com.baeldung.springamqp.simple.HelloWorldMessageApp

בזמן שהיישום פועל נראה כי:

  • היישום שולח הודעה לבורסת ברירת המחדל עם "myQueue" כמפתח הניתוב
  • לאחר מכן, התור "myQueue" מקבל את ההודעה
  • סוף - סוף, ה להקשיב השיטה צורכת את ההודעה מ- "myQueue" ומדפיסה אותה על המסוף

אנו יכולים גם להשתמש בדף הניהול של RabbitMQ בכתובת // localhost: 15672 לראות שההודעה שלנו נשלחה ונצרכה.

7. מסקנה

במדריך זה סקרנו ארכיטקטורה מבוססת מסרים על פרוטוקול AMQP באמצעות Spring AMQP לתקשורת בין יישומים.

קוד המקור השלם וכל קטעי הקוד עבור הדרכה זו זמינים בפרויקט GitHub.


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