Vårfjernkontroll med RMI

1. Oversikt

Java Remote Method Invocation tillater å påkalle et objekt som er bosatt i et annet Java Virtual Machine. Det er en veletablert teknologi, men likevel litt tungvint å bruke, som vi kan se i den offisielle Oracle-stien dedikert til emnet.

I denne raske artikkelen vil vi utforske hvordan Vårfjernkontroll gjør det mulig å utnytte RMI på en enklere og renere måte.

Denne artikkelen fullfører også oversikten over Vårfjernkontroll. Du kan finne detaljer om andre støttede teknologier i de forrige delene: HTTP Invokers, JMS, AMQP, Hessian og Burlap.

2. Maven-avhengigheter

Som vi gjorde i våre tidligere artikler, skal vi sette opp et par Vårstøvel applikasjoner: en server som avslører det eksterne objektet som kan kalles, og en klient som påkaller den eksponerte tjenesten.

Alt vi trenger er i vår-kontekst krukke - slik at vi kan ta den inn med hva som helst Vårstøvel hjelper vi foretrekker - fordi hovedmålet vårt er bare å ha hovedbibliotekene tilgjengelige.

La oss nå gå videre med det vanlige spring-boot-starter-web - husker å fjerne Tomcat avhengighet for å ekskludere den innebygde webtjenesten:

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

3. Serverapplikasjon

Vi begynner å erklære et grensesnitt som definerer en tjeneste for å bestille en tur på en drosje, som til slutt vil bli utsatt for kunder:

offentlig grensesnitt CabBookingService {Booking bookRide (String pickUpLocation) kaster BookingException; }

Deretter definerer vi en bønne som implementerer grensesnittet. Dette er bønnen som faktisk vil utføre forretningslogikken på serveren:

@Bean CabBookingService bookingService () {returner ny CabBookingServiceImpl (); }

La oss fortsette å erklære Eksportør som gjør tjenesten tilgjengelig for kunder. I dette tilfellet bruker vi RmiServiceExporter:

@Bean RmiServiceExporter-eksportør (implementering av CabBookingService) {Class serviceInterface = CabBookingService.class; RmiServiceExporter eksportør = ny RmiServiceExporter (); eksportør.setServiceInterface (serviceInterface); eksportør.setService (implementering); exporter.setServiceName (serviceInterface.getSimpleName ()); eksportør.setRegistryPort (1099); retur eksportør; }

Gjennom setServiceInterface () vi gir en referanse til grensesnittet som kan gjøres eksternt.

Vi bør også gi en referanse til objektet som faktisk utfører metoden med setService (). Vi kunne da gi havnen til RMI-register tilgjengelig på maskinen der serveren kjører hvis vi ikke vil bruke standardport 1099.

Vi bør også angi et tjenestenavn som gjør det mulig å identifisere den eksponerte tjenesten i RMI register.

Med den gitte konfigurasjonen vil klienten kunne kontakte CabBookingService på følgende URL: rmi: // HOST: 1199 / CabBookingService.

La oss endelig starte serveren. Vi trenger ikke engang å starte RMI-registeret av oss selv fordi Vår vil gjøre det automatisk for oss hvis et slikt register ikke er tilgjengelig.

4. Kundesøknad

La oss skrive nå klientapplikasjonen.

Vi begynner å erklære RmiProxyFactoryBean som vil skape en bønne som har det samme grensesnittet som eksponeres av tjenesten som kjører på serversiden, og som vil dirigere påkallelsene den vil motta til serveren:

@Bean RmiProxyFactoryBean-tjeneste () {RmiProxyFactoryBean rmiProxyFactory = ny RmiProxyFactoryBean (); rmiProxyFactory.setServiceUrl ("rmi: // localhost: 1099 / CabBookingService"); rmiProxyFactory.setServiceInterface (CabBookingService.class); returnere rmiProxyFactory; }

La oss deretter skrive en enkel kode som starter opp klientprogrammet og bruker proxyen som ble definert i forrige trinn:

public static void main (String [] args) kaster 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); }

Det er nå nok å starte klienten for å bekrefte at den påkaller tjenesten eksponert av serveren.

5. Konklusjon

I denne opplæringen så vi hvordan vi kunne bruke Vårfjernkontroll for å lette bruken av RMI som ellers vil kreve en serie kjedelige oppgaver som blant annet å spinne et register og definere tjenester ved hjelp av grensesnitt som gjør tung bruk av avmerkede unntak.

Som vanlig finner du kildene på GitHub.


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