עבודות רקע באביב עם JobRunr

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

במדריך זה נבחן תזמון ועיבוד עבודות רקע מבוזרות בג'אווה באמצעות JobRunr ונשלב אותו עם Spring.

2. אודות JobRunr

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

כדי לבצע את עבודתו, JobRunr מנתח את Java 8 lambda. הוא מסדר אותו כ- JSON ומאחסן אותו במסד נתונים יחסי או בחנות נתונים NoSQL.

3. תכונות JobRunr

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

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

4. התקנה

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

4.1. תצורת Maven

בוא נקפוץ ישר לקוד Java. אבל לפני כן, עלינו להכריז על התלות הבאה של מייבן pom.xml קוֹבֶץ:

 org.jobrunr jobrunr-spring-boot-starter 1.1.0 

4.2. שילוב אביב

לפני שאנחנו קופצים ישר כיצד ליצור עבודות רקע, עלינו לאתחל את JobRunr. כאשר אנו משתמשים ב- jobrunr-spring-boot-starter תלות, זה קל. עלינו להוסיף רק כמה מאפיינים ל- application.properties:

org.jobrunr.background-job-server.enabled = נכון org.jobrunr.dashboard.enabled = נכון

המאפיין הראשון אומר ל- JobRunr שאנחנו רוצים להתחיל מופע של a רקע JobServer האחראי על עיבוד עבודות. המאפיין השני אומר ל- JobRunr להפעיל את לוח המחוונים המוטמע.

כברירת מחדל, ה- jobrunr-spring-boot-starter ינסה להשתמש בקיים שלך מקור מידע במקרה של מסד נתונים יחסי לאחסון כל המידע הקשור לתפקיד.

עם זאת, מכיוון שנשתמש בחנות נתונים בזיכרון, עלינו לספק א StorageProvider אפונה:

@Bean StorageProvider ציבורי storageProvider (JobMapper jobMapper) {InMemoryStorageProvider storageProvider = חדש InMemoryStorageProvider (); storageProvider.setJobMapper (jobMapper); להחזיר אחסון Provider; }

5. שימוש

עכשיו, בואו נגלה כיצד ליצור ולתזמן עבודות רקע באביב באמצעות JobRunr.

5.1. הזרקת תלות

כאשר אנו רוצים ליצור מקומות עבודה, נצטרך להזרים את JobScheduler ושירות האביב הקיים שלנו המכיל את השיטה שלשמה אנו רוצים ליצור מקומות עבודה, במקרה זה, SampleJobService:

@ הזרקת JobScheduler פרטית jobScheduler; @ הזריק SampleJobService פרטי sampleJobService;

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

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

5.2. יצירת אש ושכח משרות

עכשיו שיש לנו את התלות שלנו, אנחנו יכולים ליצור עבודות אש ושכחה באמצעות ה- enqueue שיטה:

jobScheduler.enqueue (() -> sampleJobService.executeSampleJob ());

למשרות יכולות להיות פרמטרים, בדיוק כמו לכל למבדה אחרת:

jobScheduler.enqueue (() -> sampleJobService.executeSampleJob ("מחרוזת כלשהי"));

שורה זו מוודאת כי ה- lambda - כולל סוג, שיטה וטיעונים - מסודר כ- JSON לאחסון מתמשך (RDBMS כמו Oracle, Postgres, MySql ו- MariaDB או מסד נתונים NoSQL).

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

5.3. תזמון משרות בעתיד

אנו יכולים גם לתזמן עבודות בעתיד באמצעות לוח זמנים שיטה:

jobScheduler.schedule (() -> sampleJobService.executeSampleJob (), LocalDateTime.now (). plusHours (5));

5.4. תזמון משרות חוזר

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

jobScheduler.scheduleRecurrently (() -> sampleJobService.executeSampleJob (), Cron.hourly ());

5.5. ביאור עם @עבודה ביאור

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

@Job (name = "עבודת הדוגמה עם המשתנה% 0", מנסה שוב = 2) חלל ציבורי executeSampleJob (משתנה מחרוזת) {...}

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

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

6. לוח מחוונים

JobRunr מגיע עם לוח מחוונים מובנה המאפשר לנו לעקוב אחר העבודות שלנו. אנו יכולים למצוא אותו ב // localhost: 8000 ולבדוק את כל המשרות, כולל כל העבודות החוזרות והערכה של כמה זמן ייקח עד לעיבוד כל העבודות הצפויות:

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

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

7. מסקנה

במאמר זה, בנינו את מתזמן הבסיס הראשון שלנו באמצעות JobRunr עם ה- jobrunr-spring-boot-starter. המפתח העיקרי ממדריך זה הוא שהצלחנו ליצור עבודה עם שורת קוד אחת בלבד וללא כל תצורה מבוססת XML או צורך ליישם ממשק.

קוד המקור השלם לדוגמא זמין ב- GitHub.


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