Szerver nélküli funkciók a Spring Cloud funkcióval

1. Bemutatkozás

Ebben az oktatóanyagban megtanuljuk, hogyan kell használni a Spring Cloud Function funkciót.

Építünk és futtatunk egy egyszerű Spring Cloud Function-t helyben, majd telepítjük az AWS-be.

2. Tavaszi felhő funkció beállítása

Először is hajtsuk végre a semmiből, és teszteljünk egy egyszerű, két funkcióval rendelkező projektet, különböző megközelítések felhasználásával:

  • Karakterlánc-váltó, sima módszerrel
  • És egy üdvözlő, aki dedikált osztályt használ

2.1. Maven-függőségek

Az első dolog, amit meg kell tennünk, az a tavasz-felhő-indító-függvény-web függőség. Ez helyi adapterünkként fog működni, és bevezeti a funkciónk helyi futtatásához szükséges függőségeket:

 org.springframework.cloud spring-cloud-starter-function-web 1.0.1. KÖZLEMÉNY 

Maradjon velünk, mert ezt kicsit módosítjuk, amikor az AWS-be telepítjük.

2.2. A tavaszi felhő funkció megírása

Tavaszi felhő funkcióval, leleplezhetjük @Babs típusú Funkció, Fogyasztó vagy Támogató mint egyedi módszerek:

@SpringBootApplication nyilvános osztály CloudFunctionApplication {public static void main (String [] args) {SpringApplication.run (CloudFunctionApplication.class, args); } @Bean public Function reverseString () {return value -> new StringBuilder (value) .reverse (). ToString (); }}

Ahogy ebben a kódban, egy fordított karakterlánc-funkciót is kitethetünk a-ként Funkció, amelyre cél funkcionális platformunk hivatkozhat.

2.3. A fordított húr funkció helyi tesztelése

A tavasz-felhő-indító-függvény-web a függvényt HTTP-végpontként tárja fel. Miután lefuttattuk a CloudFunctionApplication, göndöríthetjük célpontunkat, hogy lokálisan teszteljük:

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

Vegye figyelembe, hogy a végpont a bab neve.

És ahogy az várható volt, a fordított karakterláncot kapjuk kimenetként:

resU gnudleaB

2.4. Tavaszi felhő funkció szkennelése csomagokban

Eltekintve attól, hogy módszerünket a @Bab, a szoftverünket a funkcionális interfészt megvalósító osztályokként is felírhatjuk Funkció:

public class Greeter végrehajtja a Funkciót {@Orride public String Apply (String s) {return "Hello" + s + ", és üdvözlünk a Spring Cloud Function-ban !!!"; }}

Ezután megadhatjuk azokat a csomagokat, amelyekben a releváns babokat keresik alkalmazás.tulajdonságok:

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

2.5. Az üdvözlő funkció helyi tesztelése

Ismét elindíthatjuk az alkalmazást, és a göndör segítségével tesztelhetjük Üdvözlő funkció:

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

Vegye figyelembe, hogy a végpont annak az osztálynak a neve, amely megvalósítja a funkcionális interfészt.

És nem meglepő, hogy visszakapjuk a várható üdvözletet:

Hello World, és üdvözlöm a Spring Cloud funkcióban !!!

3. Tavaszi felhő funkció az AWS-en

A Tavaszi Felhő Funkciót annyira erőssé teszi, hogy felépíthetjük a Tavaszi funkciókat, amelyek felhőalapúak. Magának a függvénynek nem kell tudnia arról, hogy hogyan hívták, vagy arról a környezetről, amelybe telepítve van. Például, könnyedén telepíthetjük ezt az üdvözlőt az AWS, az Azure vagy a Google Cloud platformra az üzleti logika megváltoztatása nélkül.

Mivel az AWS Lambda az egyik legnépszerűbb szerver nélküli megoldás, összpontosítsunk arra, hogyan telepítsük bele az alkalmazásunkat.

Tehát ne várjunk tovább, és telepítsük a funkciót a felhőbe!

3.1. Maven-függőségek

Ne feledje a tavasz-felhő-indító-függvény-web függőség, amelyet eredetileg hozzáadtunk. Itt az ideje ezen változtatni.

Lásd: attól függően, hogy hol fogjuk futtatni a Spring Cloud Function-t, hozzá kell adnunk a megfelelő függőséget.

Az AWS-hez használjuk rugó-felhő-funkció-adapter-aws:

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

Ezután adjuk hozzá a szükséges AWS-függőségeket a Lambda események kezeléséhez:

 com.amazonaws aws-lambda-java-events 2.0.2 biztosított com.amazonaws aws-lambda-java-core 1.1.0 biztosított 

Végül, mivel a maven build által létrehozott artefaktumot fel fogjuk tölteni az AWS Lambda-ra, ezért árnyékolt műtárgyat kell készítenünk, vagyis minden függőséget egyedi osztályfájlként robbantanak ki tégelyek helyett.

A rugós-bakancs-vékony elrendezés A függőség segít csökkenteni a műtárgy méretét azáltal, hogy kizár néhány olyan szükségletet, amelyre nincs szükség:

   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. pluginok maven-shadow-plugin false true aws 

3.2. AWS Handlers

Ha HTTP-kérésen keresztül újra ki akarjuk tüntetni a karakterlánc-váltót, akkor a Spring Cloud Function AWS szállít SpringBootRequestHandler. Megvalósítja az AWS-eket RequestHandler és felelős az AWS-kérelem továbbításáért a funkciónkba.

public class MyStringHandlers kiterjeszti a SpringBootRequestHandler {}

A Spring Cloud Function AWS szintén szállít SpringBootStreamHandler és FunctionInvokingS3EventHandler mint más példák

Most kissé furcsának tűnhet, hogy a MyStringHandlers csak egy üres osztály, de fontos szerepet játszik mind a Lambda függvény belépési pontjaként, mind a bemeneti és kimeneti típusainak meghatározásakor.

Amint az alábbi képernyőképen láthatjuk, az osztály teljes nevét megadjuk az AWS Lambda konfigurációs oldal Handler beviteli mezőjében.

3.3. Honnan tudja az AWS, hogy melyik felhőfunkciót hívja meg?

Mint kiderült, még akkor is, ha alkalmazásunkban több Spring Cloud funkció van, Az AWS csak egyet hívhat meg közülük.

A következő szakaszban megadjuk a felhőfunkció nevét egy úgynevezett környezeti változóban FUNCTION_NAME az AWS konzolon.

4. Töltse fel a függvényt az AWS-be és tesztelje

Végül építsük fel az edényünket maven-mel, majd töltsük fel az AWS Console felhasználói felületén keresztül.

4.1. Hozzon létre egy Lambda funkciót az AWS konzolon, és konfigurálja azt

Az AWS Lambda konzol oldalán a Funkció kód részben kiválaszthatjuk a Java 8 futásidejű és egyszerűen kattintson Feltöltés.

Ezt követően meg kell jelölnünk a Handler írja be a végrehajtott osztály teljesen minősített nevét SpringBootRequestHandler, vagy com.baeldung.spring.cloudfunction.MyStringHandlers a mi esetünkben:

Ezután a Környezet változókban megadjuk, hogy melyik tavaszi függvénybabot hívjuk meg a FUNCTION_NAME környezeti változó:

Miután ezt megtette, itt az ideje, hogy teszteljük a Lambda függvényt egy tesztesemény létrehozásával és egy minta karaktersorozat rendelkezésre bocsátásával:

4.2. A funkció tesztelése AWS-en

Most mi Mentés tesztünket, majd kattintson a gombra Teszt gomb.

És ahogy az várható volt, ugyanazt a kimenetet kapjuk, mint amit a funkció helyi tesztelésénél kaptunk:

4.3. Egy másik funkció tesztelése

Ne feledje, hogy még egy funkció van az alkalmazásunkban: üdvözlő. Ügyeljünk arra, hogy ez is működjön.

Megváltoztatjuk a FUNCTION_NAME környezeti változó üdvözlő:

Kattints a Mentés gombra, végül pedig a Teszt gomb ismét:

5. Következtetés

Összefoglalva, bár korai szakaszában van, A Spring Cloud Function egy hatékony eszköz az üzleti logika és minden egyes futásidejű cél szétválasztására.

Vele ugyanaz a kód futtatható web-végpontként, felhőalapú platformon vagy egy adatfolyam részeként. Kivonja az összes közlekedési részletet és infrastruktúrát, lehetővé téve a fejlesztő számára, hogy megtartsa az összes megszokott eszközt és folyamatot, és határozottan az üzleti logikára koncentráljon.

Mint mindig, nézze meg az oktatóanyag forráskódját a GitHubon.