אוטובוס ענן אביב

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

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

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

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

2. תנאים מוקדמים

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

2.1. RabbitMQ

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

docker pull rabbitmq: 3-management

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

לאחר מכן נוכל להפעיל את RabbitMQ:

docker run -d - host my-rabbit - name some-rabbit -p 15672: 15672 -p 5672: 5672 rabbitmq: 3-management

לאחר שביצענו את הפקודה, נוכל לעבור לדפדפן האינטרנט ולפתוח // localhost: 15672, שיציג את טופס ההתחברות של קונסולת הניהול. שם המשתמש המוגדר כברירת מחדל הוא: 'אוֹרֵחַ'; סיסמה: 'אוֹרֵחַ'. RabbitMQ יקשיב גם בנמל 5672.

3. הוספת מפעיל ללקוח Cloud Config

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

בואו נעצור את התצורה של הלקוח ונביא הערות ConfigClient כיתת בקר עם @ RefreshScope:

@SpringBootApplication @ RestController @ RefreshScope מחלקה ציבורית SpringCloudConfigClientApplication {// קוד כאן ...}

לבסוף, בואו נעדכן את pom.xml הקובץ והוסף מפעיל:

 org.springframework.boot spring-boot-actuator 2.2.6.RELEASE 

הגרסה האחרונה תוכל למצוא כאן.

כברירת מחדל, כל נקודות הקצה הרגישות שנוספו על ידי מפעיל מאובטחות. זה כולל '/לְרַעֲנֵן' נקודת סיום. למען הפשטות, אנו נכבה את האבטחה על ידי עדכון bootstrap.properties:

management.security.enabled = שקר

בנוסף, החל מ- Spring Boot 2, נקודות קצה של מפעיל אינן נחשפות כברירת מחדל. כדי להפוך אותם לזמינים לגישה, עלינו להוסיף זאת ב- application.yml:

ניהול: נקודות קצה: אינטרנט: חשיפה: כולל: "*"

בואו נתחיל את הלקוח קודם ונעדכן את תפקיד המשתמש מהקיים 'מפתח' ל 'מְתַכנֵת' בקובץ המאפיינים ב- GitHub. שרת התצורה יציג מיד ערכים מעודכנים; עם זאת, הלקוח לא יעשה זאת. כדי לגרום ללקוח לראות קבצים חדשים עלינו פשוט לשלוח בקשת POST ריקה אליה '/לְרַעֲנֵן' נקודת קצה, שנוספה על ידי מפעיל:

$> curl -X POST // localhost: 8080 / actuator / refresh

אנו נחזיר את קובץ JSON המציג מאפיינים מעודכנים.

[ "תפקיד משתמש" ]

לבסוף נוכל לבדוק אם תפקיד המשתמש עודכן:

$> תלתל // localhost: 8080 / whoami / Mr_Pink שלום Mr_Pink! אתה (n) מתכנת והסיסמה שלך היא 'd3v3L'.

תפקיד המשתמש עודכן בהצלחה ובשיחה '/לְרַעֲנֵן' נקודת סיום. תצורת הלקוח עודכנה מבלי להפעיל מחדש.

4. אוטובוס ענן אביב

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

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

4.1. לָקוּחַ

עלינו לעדכן את לקוח config בענן כדי שיוכל להירשם כמנוי לחילופי RabbitMQ:

 org.springframework.cloud spring-cloud-starter-bus-amqp 2.2.1.RELEASE 

הגרסה האחרונה תוכל למצוא כאן.

כדי להשלים את שינויי לקוח התצורה עלינו להוסיף פרטי RabbitMQ ולהפעיל אוטובוס ענן ב- application.yml קוֹבֶץ:

--- אביב: rabbitmq: מארח: יציאת localhost: 5672 שם משתמש: סיסמת אורח: ענן אורח: אוטובוס: מופעל: אמת רענון: מופעל: נכון 

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

כעת, ללקוח תהיה נקודת קצה נוספת '/ אוטובוס-רענון'. קריאה לנקודת קצה זו תגרום ל:

  • קבל את התצורה העדכנית ביותר משרת התצורה ועדכן את תצורת התצורה שלה @ RefreshScope
  • שלח הודעה לחילופי AMQP המודיע על אירוע הרענון
  • כל הצמתים הרשומים יעדכנו גם את תצורתם

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

4.2. שרת

לסיום, בואו נוסיף שתי תלות לשרת התצורה כדי להפוך את שינויי התצורה לאוטומטיים באופן מלא.

 org.springframework.cloud spring-cloud-config-monitor 2.2.2.RELEASE 

הגרסה האחרונה תוכל למצוא כאן.

 org.springframework.cloud spring-cloud-starter-stream-rabbit 3.0.4.RELEASE 

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

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

אנחנו רק צריכים לעדכן application.properties ותן פרטי RabbitMQ:

spring.rabbitmq.host = localhost spring.rabbitmq.port = 5672 spring.rabbitmq.username = אורח spring.rabbitmq.password = אורח

4.3. GitHub Webhook

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

עלינו להגדיר GitHub Webhook. בוא נעבור ל- GitHub ונפתח את מאפייני התצורה של אחסון המאגר שלנו. עכשיו, בואו נבחר הגדרות ו ווההוק. בואו נלחץ הוסף webhook לַחְצָן.

URL לטעינת מטען הוא כתובת האתר של שרת התצורה שלנו '/ Monitor' נקודת סיום. במקרה שלנו כתובת האתר תהיה בערך כך:

// שורש: [מוגן בדוא"ל] _IP: 8888 / צג

אנחנו רק צריכים לשנות סוג תוכן בתפריט הנפתח אל יישום / json. הבא, אנא עזוב סוֹד ריק ולחץ על הוסף webhook כפתור - אחרי זה, כולנו מסודרים.

5. בדיקות

בואו נוודא שכל היישומים פועלים. אם נחזור ונבדוק לקוח זה יופיע תפקיד משתמש כפי ש 'מְתַכנֵת' ו סיסמת משתמש כפי ש 'd3v3L‘:

$> תלתל // localhost: 8080 / whoami / Mr_Pink שלום Mr_Pink! אתה (n) מתכנת והסיסמה שלך היא 'd3v3L'.

בעבר היינו צריכים להשתמש '/לְרַעֲנֵן' נקודת קצה לטעינה מחדש של שינויי תצורה. בואו נפתח את קובץ המאפיינים, נשנה תפקיד משתמש בחזרה ל מפתח ודחפו את השינויים:

user.role = מתכנת

אם נבדוק את הלקוח כעת, נראה:

$> תלתל // localhost: 8080 / whoami / Mr_Pink שלום Mr_Pink! אתה מפתח (n) והסיסמה שלך היא 'd3v3L'.

לקוח Config עדכן את תצורתו ללא הפעלה מחדש וללא רענון מפורש כמעט בו זמנית. אנו יכולים לחזור ל- GitHub ולפתוח את ה- Webhook שנוצר לאחרונה. בחלק התחתון ביותר, יש משלוחים אחרונים. אנו יכולים לבחור אחד בראש הרשימה (בהנחה שזה היה השינוי הראשון - בכל מקרה יהיה רק ​​אחד) ולבחון את JSON שנשלח לשרת התצורה.

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

o.s.cloud.bus.event.RefreshListener: התקבלה בקשת רענון מרחוק. מקשים רעננו []

6. מסקנה

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

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


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