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.


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