גמל אפאצ'י עם מגף קפיץ

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

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

גשרים אלה בין שירותים וטכנולוגיות נקראים מסלולים. מסלולים מיושמים על מנוע (ה- CamelContext), והם מתקשרים עם מה שמכונה "החלפת מסרים".

2. תלות Maven

כדי להתחיל, נצטרך לכלול תלות ב- Boot Boot, Camel, Rest API עם Swagger ו- JSON:

  org.apache.camel camel-servlet-starter $ {camel.version} org.apache.camel camel-jackson-starter $ {camel.version} org.apache.camel camel-swagger-java-starter $ {camel.version} org.apache.camel camel-spring-boot-starter $ {camel.version} org.springframework.boot spring-boot-starter-web $ {spring-boot-starter.version} 

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

3. המחלקה הראשית

בואו ניצור תחילה אתחול האביב יישום:

@SpringBootApplication @ ComponentScan (basePackages = "com.baeldung.camel") יישום בכיתה ציבורית {public static void main (String [] args) {SpringApplication.run (Application.class, args); }}

4. תצורות גמלים למגף האביב

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

לדוגמה, בואו להגדיר יומן עבור היישום שלנו ב- application.properties קובץ src / main / resources:

logging.config = classpath: logback.xml camel.springboot.name = MyCamel server.address = 0.0.0.0 management.address = 0.0.0.0 management.port = 8081 endpoints.enabled = true endpoints.health.enabled = true

דוגמה זו מראה application.properties קובץ שקובע גם את הנתיב לתצורת Logback. על ידי הגדרת ה- IP ל "0.0.0.0" אנו מגבילים לחלוטין מנהל ו הַנהָלָה גישה בשרת האינטרנט המסופק על ידי Spring Boot. כמו כן, אנו מאפשרים את הגישה לרשת הדרושה לנקודות הקצה של היישום שלנו, כמו גם לנקודות הסיום לבדיקת הבריאות.

קובץ תצורה נוסף הוא ה- application.yml. בתוכו נוסיף כמה מאפיינים שיעזרו לנו להזרים ערכים למסלולי היישום שלנו:

שרת: יציאה: 8080 גמל: springboot: שם: שירותים ניהול מנוחה: יציאה: 8081 נקודות קצה: מופעל: תקינות שווא: מופעלת: התחלה מהירה אמיתית: createOrderPeriod: תהליך 10s OrderPeriod: 30s

5. הגדרת סרבל הגמל

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

כאמור, בהייה בגרסת 2.18 של Camel ומטה נוכל לנצל את זו שלנו application.yml - על ידי יצירת פרמטר לכתובת האתר הסופית שלנו. מאוחר יותר הוא יוחדר לקוד הג'אווה שלנו:

baeldung: api: path: '/ camel'

בחזרה לשלנו יישום בכיתה, עלינו לרשום את סרוול הגמל בשורש נתיב ההקשר שלנו, אשר יוחדר מההפניה baeldung.api.path בתוך ה application.yml כאשר האפליקציה מתחילה:

@Value ("$ {baeldung.api.path}") ContextPath מחרוזת; @Bean ServletRegistrationBean servletRegistrationBean () {ServletRegistrationBean servlet = new ServletRegistrationBean (new CamelHttpTransportServlet (), contextPath + "/ *"); servlet.setName ("CamelServlet"); החזרת סרוולט; }

החל מגרסת 2.19 של קאמל, תצורה זו הושמטה כ- CamelServlet מוגדר כברירת מחדל ל "/גָמָל".

6. בניית מסלול

נתחיל לעשות מסלול על ידי הרחבת ה- RouteBuilder בכיתה מגמל, והגדרת אותו כ- @רְכִיב כך ששגרת סריקת הרכיבים תוכל לאתר אותה במהלך אתחול שרת האינטרנט:

מחלקה @Component RestApi מרחיב את RouteBuilder {@Override public void configure () {CamelContext context = new DefaultCamelContext (); restConfiguration () ... rest ("/ api /") ... מאת ("direct: remoteService") ...}}

בשיעור זה אנו עוקפים את הגדר () שיטה של ​​Camel's RouteBuilder מעמד.

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

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

6.1. ה restConfiguration () מַסלוּל

לאחר מכן, אנו יוצרים הצהרת REST עבור נקודות הקצה שאנו מתכננים ליצור ב- restConfiguration () שיטה:

restConfiguration () .contextPath (contextPath) .port (serverPort). enableCORS (true) .apiContextPath ("/ api-doc") .apiProperty ("api.title", "Test REST API") .apiProperty ("api.version "," v1 ") .apiContextRouteId (" doc-api ") .component (" servlet ") .bindingMode (RestBindingMode.json)

כאן אנו רושמים את נתיב ההקשר עם התכונה המוזרקת שלנו מקובץ YAML. אותו הגיון הוחל על נמל היישום שלנו. CORS מופעל ומאפשר שימוש חוצה אתרים בשירות אינטרנט זה. מצב הכריכה מאפשר וממיר טיעונים ל- API שלנו.

לאחר מכן, אנו מוסיפים תיעוד של Swagger ל- URI, הכותרת והגרסה שקבענו בעבר. כשאנחנו יוצרים שיטות / נקודות קצה עבור שירות האינטרנט REST שלנו, תיעוד Swagger יעודכן אוטומטית.

ההקשר הזה של Swagger הוא כשלעצמו מסלול גמלים, ואנחנו יכולים לראות מידע טכני אודותיו ביומן השרתים במהלך תהליך ההפעלה. תיעוד הדוגמה שלנו מוגש כברירת מחדל בכתובת // localhost: 8080 / camel / api-doc.

6.2. ה מנוחה() מַסלוּל

עכשיו, בוא נבצע את מנוחה() שיחת שיטה מה- הגדר () השיטה המפורטת לעיל:

מנוחה ("/ api /") .id ("api-route") .consumes ("application / json") .post ("/ bean") .bindingMode (RestBindingMode.json_xml) .type (MyBean.class) .to ("ישיר: remoteService");

שיטה זו די פשוטה עבור מי שמכיר APIs. ה תְעוּדַת זֶהוּת הוא זיהוי המסלול בתוך CamelContext. השורה הבאה מגדירה את סוג MIME. מצב הכריכה מוגדר כאן כדי להראות שנוכל להגדיר מצב על ה- restConfiguration ().

ה הודעה() השיטה מוסיפה פעולה ל- API ויוצרת "פוסט / שעועיתנקודת קצה, ואילו ה- MyBean (שעועית ג'אווה רגילה עם מזהה שלם ו שם מחרוזת) מגדיר את הפרמטרים הצפויים.

באופן דומה, פעולות HTTP כגון GET, PUT ו- DELETE כולן זמינות גם בצורה של לקבל(), לָשִׂים(), לִמְחוֹק().

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

6.3. ה מ() מסלול עם שינוי צורה()

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

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

מ ("direct: remoteService") .routeId ("מסלול ישיר"). tracing () .log (">>> $ {body.id}") .log (">>> $ {body.name}" ) .transform (). פשוט ("שלום $ {in.body.name}"). setHeader (Exchange.HTTP_RESPONSE_CODE, קבוע (200));

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

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

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

  • הפעל את פקודת הפקודה: קפיץ אתחול mvn: לרוץ
  • בצע בקשת POST ל // localhost: 8080 / גמל / אפי / שעועית עם פרמטרים לכותרת: סוג תוכן: יישום / json, ומטען {"Id": 1, "name": "World"}
  • עלינו לקבל קוד החזרה של 201 והתגובה: שלום עולם

6.4. שפת התסריט הפשוטה

הדוגמה מוציאה רישום באמצעות מַעֲקָב() שיטה. שימו לב שהשתמשנו ב- ${} מצייני מיקום; אלה הם חלק משפת סקריפטים השייכת לגמל בשם SIMPLE. הוא מוחל על הודעות המוחלפות על פני המסלול, כמו גוף המסר.

בדוגמה שלנו, אנו משתמשים ב- SIMPLE כדי להעביר ליומן את תכונות השעועית הנמצאות בגוף ההודעה של הגמל.

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

6.5. ה מ() מסלול עם תהליך()

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

מ- ("direct: remoteService") .routeId ("מסלול ישיר"). tracing () .log (">>> $ {body.id}") .log (">>> $ {body.name}" ). תהליך (מעבד חדש () {@ החלף תהליך ריקני ציבורי (Exchange exchange) זורק חריג {MyBean bodyIn = (MyBean) exchange.getIn (). getBody (); ExampleServices.example (bodyIn); exchange.getIn (). setBody (bodyIn);}}). setHeader (Exchange.HTTP_RESPONSE_CODE, קבוע (200));

זה מאפשר לנו לחלץ את הנתונים לשעועית, אותו אחד שהוגדר בעבר ב- סוּג() ולעבד אותה במערכת שלנו דוגמאות שירותים שִׁכבָה.

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

מחלקה ציבורית ExampleServices {דוגמה חללית ציבורית סטטית (MyBean bodyIn) {bodyIn.setName ("שלום" + bodyIn.getName ()); bodyIn.setId (bodyIn.getId () * 10); }}

אותה בקשת HTTP חוזרת כעת עם קוד תגובה 201 וגוף: {"Id": 10, "name": "Hello, World"}.

7. מסקנה

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

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

ניתן למצוא דוגמה זו של REST ב- GitHub.

לבסוף, מעבר ל לְסַנֵן(), תהליך(), שינוי צורה(), ו מרשל () ממשקי API, דפוסי אינטגרציה רבים אחרים ומניפולציות נתונים זמינים ב- Camel:

  • דפוסי שילוב גמלים
  • מדריך למשתמש לגמלים
  • גמל שפה פשוטה

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