Funkcije bez poslužitelja s funkcijom Spring Cloud

1. Uvod

U ovom uputstvu naučit ćemo kako koristiti funkciju Spring Cloud.

Lokalno ćemo izgraditi i pokrenuti jednostavnu funkciju Spring Cloud, a zatim je rasporediti na AWS.

2. Spring Cloud Function Setup

Za početak, provedimo od nule i isprobajmo jednostavan projekt s dvije funkcije koristeći različite pristupe:

  • String reverser, koristeći običnu metodu
  • I pozdrav putem namjenskog predavanja

2.1. Ovisnosti Mavena

Prvo što moramo učiniti je uključiti proljeće-oblak-starter-funkcija-web ovisnost. Ovo će djelovati kao naš lokalni adapter i donosi potrebne ovisnosti za lokalno pokretanje naše funkcije:

 org.springframework.cloud proljeće-oblak-starter-funkcija-web 1.0.1.OBLAŽENJE 

Pratite nas jer ćemo ovo malo izmijeniti kada se rasporedimo na AWS.

2.2. Pisanje funkcije proljetnog oblaka

S funkcijom Spring Cloud, možemo razotkriti @Grahs tipa Funkcija, Potrošač ili Dobavljač kao pojedinačne metode:

@SpringBootApplication javna klasa CloudFunctionApplication {public static void main (String [] args) {SpringApplication.run (CloudFunctionApplication.class, args); } @Bean javna funkcija reverseString () {povratna vrijednost -> novi StringBuilder (vrijednost) .reverse (). ToString (); }}

Kao u ovom kodu, značajku obrnutog niza možemo izložiti kao Funkcija, na koju se naša ciljana funkcionalna platforma može pozvati.

2.3. Lokalno testiranje funkcije obrnutog niza

The proljeće-oblak-starter-funkcija-web izlaže funkciju kao HTTP krajnju točku. Nakon što pokrenemo CloudFunctionApplication, možemo uviti cilj kako bismo ga testirali lokalno:

curl localhost: 8080 / reverseString -H "Content-Type: text / plain" -d "Baeldung User"

Imajte na umu da je krajnja točka naziv zrna graha.

I kao što se očekivalo, kao izlaz dobivamo obrnuti niz:

resU gnudleaB

2.4. Skeniranje funkcije Spring Cloud u paketima

Osim što smo našu metodu izložili kao @Grah, svoj bismo softver mogli napisati i kao klase koje implementiraju funkcionalno sučelje Funkcija:

javna klasa Greeter implementira funkciju {@Override public String apply (String s) {return "Hello" + s + ", i dobrodošli u Spring Cloud Function !!!"; }}

Tada možemo odrediti pakete u kojima ćemo skenirati odgovarajući grah primjena.svojstva:

spring.cloud.function.scan.packages = com.baeldung.spring.cloudfunction.functions

2.5. Lokalno testiranje funkcije pozdravljanja

Opet, možemo pokrenuti aplikaciju i upotrijebiti curl za testiranje Pozdrav funkcija:

curl localhost: 8080 / greeter -H "Content-Type: text / plain" -d "World"

Primijetite da je krajnja točka naziv klase koja implementira funkcionalno sučelje.

I, bez iznenađenja, vraćamo očekivani pozdrav:

Pozdrav Svijete, i dobrodošao u funkciju Spring Cloud !!!

3. Proljetna funkcija oblaka na AWS-u

Ono što funkciju Spring Cloud čini tako moćnom jest to što možemo graditi funkcije omogućene za Spring koje su agnostičke u oblaku. Sama funkcija ne treba znati o tome kako je pozvana niti u kakvom je okruženju raspoređena. Na primjer, ovaj pozdrav možemo lako implementirati na AWS, Azure ili Google Cloud platformu bez promjene bilo koje poslovne logike.

Budući da je AWS Lambda jedno od popularnih rješenja bez poslužitelja, usredotočimo se na to kako u njega rasporediti našu aplikaciju.

Dakle, nemojmo više čekati i svoju funkciju rasporedimo u oblak!

3.1. Ovisnosti Mavena

Sjetite se proljeće-oblak-starter-funkcija-web ovisnost, koju smo izvorno dodali. Sad je vrijeme da se to promijeni.

Pogledajte, ovisno o tome gdje ćemo pokretati Spring Cloud funkciju, trebamo dodati odgovarajuću ovisnost.

Za AWS ćemo upotrijebiti opruga-oblak-funkcija-adapter-aws:

 org.springframework.cloud spring-cloud-function-adapter-aws 

Dalje, dodajmo potrebne AWS ovisnosti za obradu Lambda događaja:

 com.amazonaws aws-lambda-java-events 2.0.2 pod uvjetom com.amazonaws aws-lambda-java-core 1.1.0 pod uvjetom 

Konačno, budući da ćemo artefakt generiran izradom maven prenijeti u AWS Lambda, moramo izraditi artefakt koji je zasjenjen, što znači da su sve ovisnosti eksplodirane kao pojedinačne datoteke klase umjesto staklenki.

The proljeće-čizma-tanki-raspored ovisnost nam pomaže smanjiti veličinu artefakta izuzimajući neke ovisnosti koje nisu potrebne:

   org.apache.maven.plugins maven-deploy-plugin true org.springframework.boot spring-boot-maven-plugin org.springframework.boot.experimental spring-boot-thin-layout 1.0.10.RELEASE org.apache.maven. dodaci maven-shadow-plugin false true aws 

3.2. AWS rukovatelji

Ako želimo ponovno izložiti svoj reverser niza putem HTTP zahtjeva, tada se isporučuje Spring Cloud Function AWS SpringBootRequestHandler. Primjenjuje AWS-ove RequestHandler i zadužen je za slanje zahtjeva AWS našoj funkciji.

javna klasa MyStringHandlers proširuje SpringBootRequestHandler {}

Spring Cloud Function AWS također dolazi s SpringBootStreamHandler i FunctionInvokingS3EventHandler kao i drugi primjeri

Sad, može se činiti pomalo čudno da MyStringHandlers je samo prazan razred, ali igra važnu ulogu u oba djelujući kao ulazna točka Lambda funkcije i definirajući njezine ulazne i izlazne vrste.

Kao što ćemo vidjeti na snimci zaslona u nastavku, pružit ćemo potpuno kvalificirano ime ove klase u polju za unos Handlera na konfiguracijskoj stranici AWS Lambda.

3.3. Kako AWS zna koju funkciju u oblaku treba pozvati?

Ispostavilo se, čak i ako u svojoj aplikaciji imamo više od jedne funkcije Spring Cloud, AWS se može pozvati samo na jedan od njih.

U sljedećem ćemo odjeljku odrediti naziv funkcije oblaka u varijabli okruženja koja se zove FUNCTION_NAME na AWS konzoli.

4. Prenesite funkciju u AWS i testirajte

Na kraju, izgradimo svoju jar s mavenom, a zatim je prenesite putem korisničkog sučelja AWS Console.

4.1. Stvorite Lambda funkciju na AWS konzoli i konfigurirajte je

Na stranici AWS Lambda konzole, u odjeljku Funkcijski kod, možemo odabrati Java 8 vrijeme izvođenja i jednostavno kliknite Učitaj.

Nakon toga trebamo naznačiti u Rukovatelj polje potpuno kvalificirani naziv klase koja se provodi SpringBootRequestHandler, ili com.baeldung.spring.cloudfunction.MyStringHandlers u našem slučaju:

A zatim u varijablama okruženja naznačujemo koji će grah Spring funkcije pozvati putem FUNCTION_NAME varijabla okoline:

A nakon što je to učinio, vrijeme je da testiramo funkciju Lambda stvaranjem test događaja i isporukom uzorka niza:

4.2. Testiranje funkcije na AWS-u

Sad mi Uštedjeti naš test, a zatim kliknite Test dugme.

I, kao što se očekivalo, dobit ćemo isti izlaz kao onaj koji smo dobili kada smo lokalno testirali funkciju:

4.3. Testiranje druge funkcije

Zapamtite, u našoj aplikaciji imamo još jednu funkciju: pozdravi. Pobrinimo se da i to djeluje.

Promijenit ćemo FUNCTION_NAME promjenjiva okolina na pozdravi:

Pritisnite Uštedjeti gumb i na kraju, Test gumb opet:

5. Zaključak

Ukratko, iako u ranoj fazi, Spring Cloud Function moćan je alat za razdvajanje poslovne logike od bilo kojeg određenog cilja vremena izvođenja.

S njim se isti kôd može izvoditi kao mrežna krajnja točka, na oblačnoj platformi ili kao dio toka. Apstrahira sve transportne detalje i infrastrukturu, omogućavajući programeru da zadrži sve poznate alate i procese i čvrsto se usredotoči na poslovnu logiku.

Kao i uvijek, pogledajte izvorni kod za ovaj vodič na GitHubu.