Jarná diaľková komunikácia s RMI
1. Prehľad
Java Diaľkové vyvolanie metódy umožňuje vyvolanie objektu s bydliskom v inom Virtuálny stroj Java. Jedná sa o dobre zavedenú technológiu, ktorú je však možné používať trochu ťažkopádne, ako vidíme na oficiálnej trase Oracle venovanej tejto téme.
V tomto rýchlom článku sa dozvieme, ako na to Jarná diaľková komunikácia umožňuje pákový efekt RMI jednoduchším a čistejším spôsobom.
Tento článok tiež dokončuje prehľad Jarná diaľková komunikácia. Podrobnosti o ďalších podporovaných technológiách nájdete v predchádzajúcich inštaláciách: HTTP Invokers, JMS, AMQP, Hessian a Burlap.
2. Maven závislosti
Rovnako ako v predchádzajúcich článkoch, pripravíme ich niekoľko Jarná topánka aplikácie: server, ktorý sprístupňuje vzdialený volaný objekt, a klient, ktorý vyvoláva exponovanú službu.
Všetko, čo potrebujeme, je v jarný kontext džbán - takže ho môžeme priviesť pomocou čohokoľvek Jarná topánka pomocníka, ktorého uprednostňujeme - pretože naším hlavným cieľom je len mať k dispozícii hlavné knižnice.
Poďme teraz k obvyklému spring-boot-starter-web - nezabudnite odstrániť Tomcat závislosť na vylúčení zabudovanej webovej služby:
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat
3. Serverová aplikácia
Začneme deklarovať rozhranie, ktoré definuje službu rezervácie jazdy v taxíku, ktorá bude nakoniec vystavená klientom:
verejné rozhranie CabBookingService {Booking bookRide (String pickUpLocation) vyvolá BookingException; }
Potom definujeme fazuľa, ktorá implementuje rozhranie. Toto je fazuľa, ktorá skutočne vykoná obchodnú logiku na serveri:
@Bean CabBookingService bookingService () {návrat nový CabBookingServiceImpl (); }
Pokračujme vo vyhlasovaní Vývozca ktorá sprístupňuje službu klientom. V tomto prípade použijeme RmiServiceExporter:
@Bean RmiServiceExporter exportér (implementácia CabBookingService) {Class serviceInterface = CabBookingService.class; Vývozca RmiServiceExporter = nový RmiServiceExporter (); exporter.setServiceInterface (serviceInterface); exporter.setService (implementácia); exporter.setServiceName (serviceInterface.getSimpleName ()); exporter.setRegistryPort (1099); spätný vývozca; }
Skrz setServiceInterface () poskytujeme odkaz na rozhranie, ktoré bude sprístupnené na diaľku.
Mali by sme tiež poskytnúť odkaz na objekt, ktorý v skutočnosti vykonáva metódu setService (). Potom by sme mohli zabezpečiť prístav Register RMI k dispozícii na stroji, na ktorom je spustený server, ak nechceme používať predvolený port 1099.
Mali by sme tiež nastaviť názov služby, ktorý umožňuje identifikovať exponovanú službu v RMI registratúra.
S danou konfiguráciou bude klient schopný kontaktovať CabBookingService na nasledujúcej adrese URL: rmi: // HOST: 1199 / CabBookingService.
Poďme konečne spustiť server. Nepotrebujeme ani sami spustiť register RMI, pretože Jar urobí to automaticky za nás, ak takýto register nie je k dispozícii.
4. Klientská aplikácia
Poďme teraz napísať klientskú aplikáciu.
Začneme vyhlasovať RmiProxyFactoryBean , ktorý vytvorí fazuľa, ktorá má rovnaké rozhranie, vystavené službou bežiacou na strane servera a ktorá bude transparentne smerovať vyvolané príkazy, ktoré dostane na server:
@Bean RmiProxyFactoryBean service () {RmiProxyFactoryBean rmiProxyFactory = nový RmiProxyFactoryBean (); rmiProxyFactory.setServiceUrl ("rmi: // localhost: 1099 / CabBookingService"); rmiProxyFactory.setServiceInterface (CabBookingService.class); vrátiť rmiProxyFactory; }
Poďme potom napísať jednoduchý kód, ktorý spustí klientsku aplikáciu a použije proxy definované v predchádzajúcom kroku:
public static void main (String [] args) hodí 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); }
Teraz stačí spustiť klienta a overiť, či vyvoláva službu vystavenú serverom.
5. Záver
V tomto tutoriáli sme videli, ako by sme mohli využiť Jarná diaľková komunikácia uľahčiť používanie RMI ktoré inak budú vyžadovať sériu zdĺhavých úloh, ako je predovšetkým roztočenie registra a definovanie služieb pomocou rozhraní, ktoré veľmi využívajú kontrolované výnimky.
Ako obvykle, zdroje nájdete na GitHub.