מרחוק באביב עם RMI

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

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

במאמר מהיר זה נחקור כיצד מרחוק באביב מאפשר למנף RMI בצורה קלה ונקייה יותר.

מאמר זה משלים גם את הסקירה הכללית של מרחוק באביב. תוכל למצוא פרטים על טכנולוגיות נתמכות אחרות בתשלומים הקודמים: HTTP Invokers, JMS, AMQP, Hessian ו- Burlap.

2. תלות Maven

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

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

בואו נתקדם עכשיו עם הרגיל קפיץ-אתחול-רשת - זוכר להסיר את טומקט תלות שלא לכלול את שירות האינטרנט המשובץ:

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat 

3. יישום שרת

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

ממשק ציבורי CabBookingService {הזמנת bookRide (מחרוזת pickUpLocation) זורק BookingException; }

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

@Bean CabBookingService bookingService () {החזר CabBookingServiceImpl חדש (); }

בואו נמשיך להכריז על יְצוּאָן שמנגיש את השירות ללקוחות. במקרה זה נשתמש ב- RmiServiceExporter:

@Bean RmiServiceExporter יצואן (יישום CabBookingService) {Class serviceInterface = CabBookingService.class; יצואנית RmiServiceExporter = RmiServiceExporter חדש (); exporter.setServiceInterface (serviceInterface); exporter.setService (יישום); exporter.setServiceName (serviceInterface.getSimpleName ()); exporter.setRegistryPort (1099); יצואן החזרה; }

דרך setServiceInterface () אנו מספקים התייחסות לממשק שניתן יהיה להתקשר מרחוק.

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

עלינו להגדיר שם שירות המאפשר זיהוי השירות החשוף ב- RMI רישום.

עם התצורה הנתונה הלקוח יוכל ליצור קשר עם CabBookingService בכתובת האתר הבאה: rmi: // HOST: 1199 / CabBookingService.

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

4. יישום לקוח

בואו נכתוב עכשיו את יישום הלקוח.

אנו מתחילים להכריז על RmiProxyFactoryBean שייצור שעועית שממשק זהה חושף על ידי השירות המופעל בצד השרת וינווט בשקיפות את הקריאות שהוא יקבל לשרת:

שירות @Bean RmiProxyFactoryBean () {RmiProxyFactoryBean rmiProxyFactory = RmiProxyFactoryBean חדש (); rmiProxyFactory.setServiceUrl ("rmi: // localhost: 1099 / CabBookingService"); rmiProxyFactory.setServiceInterface (CabBookingService.class); החזר rmiProxyFactory; }

בוא נכתוב קוד פשוט שמפעיל את יישום הלקוח ומשתמש ב- proxy שהוגדר בשלב הקודם:

main static public ריק (String [] args) זורק BookingException {CabBookingService service = SpringApplication .run (RmiClient.class, args) .getBean (CabBookingService.class); Booking bookingOutcome = service .bookRide ("13 Seagate Blvd, Key Largo, FL 33037"); System.out.println (bookingOutcome); }

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

5. מסקנה

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

כרגיל, תוכלו למצוא את המקורות ב- GitHub.


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