מבוא ל- RabbitMQ

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

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

RabbitMQ הוא מתווך הודעות המיישם פרוטוקול Advanced Message Queuing Protocol (AMQP). הוא מספק ספריות לקוחות עבור שפות תכנות עיקריות.

מלבד שימוש לצורך ניתוק רכיבי תוכנה ניתן להשתמש ב- RabbitMQ ל:

  • ביצוע פעולות רקע
  • ביצוע פעולה אסינכרונית

2. מודל מסרים

ראשית, בואו נסתכל במהירות ובמהירות על אופן הפעולה של העברת המסרים.

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

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

3. התקנה

בהתחלה בואו נפעיל את RabbitMQ באמצעות מדריך ההתקנה הרשמי כאן.

אנו משתמשים באופן טבעי בלקוח Java לצורך אינטראקציה עם שרת RabbitMQ; התלות של Maven עבור לקוח זה היא:

 com.rabbitmq amqp-client 4.0.0 

לאחר הפעלת המתווך של RabbitMQ באמצעות המדריך הרשמי, עלינו להתחבר אליו באמצעות לקוח java:

מפעל ConnectionFactory = ConnectionFactory חדש (); factory.setHost ("localhost"); חיבור חיבור = factory.newConnection (); ערוץ ערוץ = connection.createChannel (); 

אנו משתמשים ב- ConnectionFactory כדי להתקין את החיבור עם השרת, הוא דואג גם לפרוטוקול (AMQP) ולאימות. כאן אנו מתחברים לשרת ב מארח מקומי, אנו יכולים לשנות את שם המארח באמצעות ה- setHost פוּנקצִיָה.

אנחנו יכולים להשתמש setPort כדי להגדיר את היציאה אם ​​יציאת ברירת המחדל אינה משמשת את שרת RabbitMQ; יציאת ברירת המחדל עבור RabbitMQ היא 15672:

factory.setPort (15678);

אנו יכולים להגדיר את שם המשתמש והסיסמה:

factory.setUsername ("user1"); factory.setPassword ("MyPassword");

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

4. מפיק

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

ראשית, בואו נגדיר תור:

channel.queueDeclare ("products_queue", false, false, false, null);

בכל פעם שמשתמשים מוסיפים מוצר חדש, אנו נפרסם הודעה לתור:

הודעת מחרוזת = "פרטי מוצר"; channel.basicPublish ("", "products_queue", null, message.getBytes ());

לבסוף, אנו סוגרים את הערוץ ואת החיבור:

channel.close (); connection.close ();

הודעה זו תצרך על ידי שירות אחר, האחראי על שליחת מיילים ללקוחות.

5. צרכן

בואו נראה מה נוכל ליישם את הצד הצרכני; אנו נכריז על אותו תור:

channel.queueDeclare ("products_queue", false, false, false, null);

כך אנו מגדירים את הצרכן שיעבד הודעות מהתור באופן אסינכרוני:

DefaultConsumer הצרכן = חדש DefaultConsumer (ערוץ) {@Override public void handleDelivery (String consumerTag, מעטפת מעטפה, AMQP.BasicProperties נכסים, בתים [] body) זורק IOException {String message = new String (body, "UTF-8"); // לעבד את ההודעה}}; channel.basicConsume ("products_queue", נכון, צרכן);

6. מסקנה

מאמר פשוט זה כיסה את מושגי היסוד של RabbitMQ ודן בדוגמה פשוטה באמצעותו.

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