Kiszolgáló nélküli Java-alkalmazások üzembe helyezése a Quarkus használatával az Azure Functionsben

Ebben a cikkben egy kiszolgáló nélküli Java-alkalmazást fog fejleszteni, létrehozni és üzembe helyezni az Azure Functionsben a Quarkus használatával. Ez a cikk a Quarkus Funqyt és annak beépített támogatását használja a Java-hoz készült Azure Functions HTTP-eseményindítóhoz. A Quarkus és az Azure Functions használata a Quarkus programozási modell erejét biztosítja az Azure Functions skálázható és rugalmas használatával. Ha végzett, kiszolgáló nélküli Quarkus-alkalmazásokat fog futtatni az Azure Functionsben, és továbbra is figyelni fogja az alkalmazást az Azure-ban.

Előfeltételek

Az alkalmazásprojekt létrehozása

A cikkhez tartozó Java-mintaprojekt klónozásához használja az alábbi parancsot. A minta a GitHubon található.

git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-01-10
cd functions-quarkus

Ha a leválasztásos HEAD állapotról szóló üzenet jelenik meg, ezt az üzenetet nyugodtan figyelmen kívül hagyhatja. Mivel ez a cikk nem igényel véglegesítést, a leválasztott HEAD állapot megfelelő.

A mintafüggvény megismerése. Nyissa meg a functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java fájlt.

Futtassa az alábbi parancsot. A @Funq széljegyzet kiszolgáló nélküli függvénysé teszi a metódust (ebben az esetben funqyHello).

@Funq
public String funqyHello() {
    return "hello funqy";
}

Az Azure Functions Java saját Azure-specifikus széljegyzetekkel rendelkezik, de ezek a széljegyzetek nem szükségesek, ha a Quarkus-t az Azure Functionsben egyszerű kapacitásban használja, ahogy most is tesszük. Az Azure Functions Java-megjegyzéseivel kapcsolatos további információkért tekintse meg az Azure Functions Java fejlesztői útmutatóját.

Ha másként nem adja meg, a függvény neve megegyezik a metódus nevével. A függvény nevét a következő paranccsal is definiálhatja egy paraméterrel a széljegyzethez:

@Funq("alternateName")
public String funqyHello() {
    return "hello funqy";
}

A név fontos. A rest URI része lesz a függvény meghívása, ahogy azt a cikk későbbi részében is láthatjuk.

A függvény helyi tesztelése

Quarkus fejlesztői mód futtatására használható mvn a helyi terminálon. A Quarkus ily módon történő futtatása lehetővé teszi az élő újratöltést háttér-összeállítással. Ha módosítja a Java-fájlokat és/vagy az erőforrásfájlokat, és frissíti a böngészőt, ezek a módosítások automatikusan érvénybe lépnek.

A böngészőfrissítés aktiválja a munkaterület vizsgálatát. Ha a vizsgálat bármilyen változást észlel, a Java-fájlok újrafordítása és az alkalmazás ismételt üzembe helyezése történik. Az ismételten üzembe helyezést kérő alkalmazás a kérést szolgáltatásokat nyújtja. Ha bármilyen probléma merül fel a fordítással vagy az üzembe helyezéssel kapcsolatban, egy hibaoldal jelzi.

Az alábbi eljárásban cserélje le yourResourceGroupName az erőforráscsoport nevét. A függvényalkalmazások nevének globálisan egyedinek kell lennie az Összes Azure-ban. Az erőforráscsoportok nevének globálisan egyedinek kell lennie egy előfizetésen belül. Ez a cikk úgy éri el a szükséges egyediséget, hogy az erőforráscsoport nevét a függvénynévre írja elő. Érdemes lehet egyedi azonosítót elővenni a létrehozott nevekre, amelyeknek egyedinek kell lenniük. Egy hasznos technika a monogramok használata, amelyet a mai dátum mmdd követ formátumban.

Az erőforráscsoport nem szükséges az utasítások ezen részében, de később szükséges. Az egyszerűség kedvéért a Maven-projekthez meg kell határoznia a tulajdonságot.

  1. Quarkus fejlesztői mód meghívása:

    cd functions-azure
    mvn -DskipTests -DresourceGroup=<yourResourceGroupName> quarkus:dev
    

    A kimenetnek az alábbihoz hasonlónak kell lennie:

    ...
    --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
    -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
    --\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
    INFO  [io.quarkus] (Quarkus Main Thread) quarkus-azure-function 1.0-SNAPSHOT on JVM (powered by Quarkus xx.xx.xx.) started in 1.290s. Listening on: http://localhost:8080
    
    INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
    INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, funqy-http, smallrye-context-propagation, vertx]
    
    --
    Tests paused
    Press [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
    
  2. A függvény elérése a CURL helyi terminál parancsával:

    curl localhost:8080/api/funqyHello
    

    A kimenetnek az alábbihoz hasonlónak kell lennie:

    "hello funqy"
    

Függőséginjektálás hozzáadása a függvényhez

A nyílt szabványú Jakarta Enterprise kiadás Contexts and Dependency Injection (CDI) függőséginjektálást biztosít a Quarkusban. Az injekciók általános és a CDI-vel való magas szintű áttekintéséhez tekintse meg a Jakarta Enterprise kiadás oktatóanyagot.

  1. Adjon hozzá egy új függvényt, amely függőséginjektálást használ.

    Hozzon létre egy GreetingService.java fájlt a functions-quarkus/src/main/java/io/quarkus könyvtárban. Használja a következő kódot a fájl forráskódjaként:

    package io.quarkus;
    
    import javax.enterprise.context.ApplicationScoped;
    
    @ApplicationScoped
    public class GreetingService {
    
        public String greeting(String name) {
            return "Welcome to build Serverless Java with Quarkus on Azure Functions, " + name;
        }
    
    }
    

    Mentse a fájlt.

    GreetingService egy injektálható bab, amely implementál egy greeting() módszert. A metódus egy paraméterrel rendelkező sztringüzenetet Welcome...name ad vissza.

  2. Nyissa meg a meglévő functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java fájlt. Cserélje le az osztályt a következő kódra egy új gService mező és a greeting metódus hozzáadásához:

    package io.quarkus;
    
    import javax.inject.Inject;
    import io.quarkus.funqy.Funq;
    
    public class GreetingFunction {
    
        @Inject
        GreetingService gService;
    
        @Funq
        public String greeting(String name) {
            return gService.greeting(name);
        }
    
        @Funq
        public String funqyHello() {
            return "hello funqy";
        }
    
    }
    

    Mentse a fájlt.

  3. Az új greeting függvény elérése a curl helyi terminál parancsával:

    curl -d '"Dan"' -X POST localhost:8080/api/greeting
    

    A kimenetnek az alábbihoz hasonlónak kell lennie:

    "Welcome to build Serverless Java with Quarkus on Azure Functions, Dan"
    

    Fontos

    Az élő kódolás (más néven fejlesztői mód) lehetővé teszi az alkalmazás futtatását és a módosítások menet közbeni módosítását. A Quarkus automatikusan újrafordítást végez, és újra betölti az alkalmazást a módosítások végrehajtásakor. Ez egy hatékony és hatékony fejlesztési stílus, amelyet ebben a cikkben fog használni.

    Mielőtt továbblép a következő lépésre, állítsa le a Quarkus fejlesztői módot a Ctrl+C billentyűkombinációval.

Az alkalmazás üzembe helyezése az Azure-ban

  1. Ha még nem tette meg, jelentkezzen be az Azure-előfizetésbe az alábbi bejelentkezési paranccsal, és kövesse a képernyőn megjelenő utasításokat:

    az login
    

    Megjegyzés:

    Ha több Azure-bérlő van társítva az Azure-beli hitelesítő adataival, meg kell adnia, hogy melyik bérlőbe szeretne bejelentkezni. Ezt a beállítással --tenant teheti meg. For example: az login --tenant contoso.onmicrosoft.com.

    Folytassa a folyamatot a webböngészőben. Ha nem érhető el webböngésző, vagy ha a webböngésző nem nyitható meg, használja az eszközkód-folyamatot a következővel az login --use-device-code: .

    A sikeres bejelentkezés után a helyi terminál kimenetének a következőhöz hasonlóan kell kinéznie:

    xxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxx 'Microsoft'
    [
        {
            "cloudName": "AzureCloud",
            "homeTenantId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxx",
            "id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx",
            "isDefault": true,
            "managedByTenants": [],
            "name": "Contoso account services",
            "state": "Enabled",
            "tenantId": "xxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxx",
            "user": {
            "name": "user@contoso.com",
            "type": "user"
            }
        }
    ]
    
  2. A függvények létrehozása és üzembe helyezése az Azure-ban.

    Az előző lépésben létrehozott pom.xml fájl a következőt használja azure-functions-maven-plugin: . A futtatás mvn install konfigurációs fájlokat és egy szükséges azure-functions-maven-plugin átmeneti könyvtárat hoz létre. Ehhez yourResourceGroupNamehasználja a korábban használt értéket.

    mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deploy
    
  3. Az üzembe helyezés során jelentkezzen be az Azure-ba. A azure-functions-maven-plugin beépülő modul úgy van konfigurálva, hogy a projekt minden üzembe helyezésekor kérje az Azure-bejelentkezést. A build során az alábbihoz hasonló kimenet jelenik meg:

    [INFO] Auth type: DEVICE_CODE
    To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AXCWTLGMP to authenticate.
    

    A kimenet szerint végezze el a hitelesítést az Azure-ban a böngésző és a megadott eszközkód használatával. Számos egyéb hitelesítési és konfigurációs lehetőség érhető el. A teljes referenciadokumentáció azure-functions-maven-plugin az Azure Functions: Configuration Details webhelyen érhető el.

  4. A hitelesítés után a buildnek folytatódnia kell, és be kell fejeződnie. Győződjön meg arról, hogy a kimenet a BUILD SUCCESS végéhez közeledik.

    Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net
    

    A függvényt az Azure-ban aktiváló URL-címet is megtalálhatja a kimeneti naplóban:

    [INFO] HTTP Trigger Urls:
    [INFO] 	 quarkus : https://quarkus-azure-functions-http-archetype-20220629204040017.azurewebsites.net/api/{*path}
    

    Az üzembe helyezés befejeződése eltarthat egy ideig. Addig is vizsgáljuk meg az Azure Functionst az Azure Portalon.

A kiszolgáló nélküli függvény elérése és monitorozása az Azure-ban

Jelentkezzen be a portálra, és győződjön meg arról, hogy ugyanazt a bérlőt és előfizetést választotta ki, amelyet az Azure CLI-ben használt.

  1. Írja be a függvényalkalmazást az Azure Portal tetején található keresősávra, és válassza az Enter billentyűt. A függvényalkalmazást üzembe kell helyezni, és a névvel <yourResourceGroupName>-function-quarkusegyütt kell megjelennie.

    Screenshot that shows the function app in the portal.

  2. Válassza ki a függvényalkalmazást a részletes információk megjelenítéséhez, például a hely, az előfizetés, az URL-cím, a metrikák és az App Service-csomag megjelenítéséhez. Ezután válassza ki az URL-címet .

    Screenshot that shows a URL and other function app details.

  3. Győződjön meg arról, hogy az üdvözlőlapon az látható, hogy a függvényalkalmazás "működik".

    Screenshot that shows the welcome page for a function app.

  4. Hívja meg a függvényt greeting a helyi terminál következő curl parancsával.

    Fontos

    Cserélje le YOUR_HTTP_TRIGGER_URL a saját függvény URL-címét, amelyet az Azure Portalon vagy a kimenetben talál.

    curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting
    

    A kimenetnek a következőképpen kell kinéznie:

    "Welcome to build Serverless Java with Quarkus on Azure Functions, Dan on Azure"
    

    A másik függvényt (funqyHello) az alábbi curl paranccsal is elérheti:

    curl https://YOUR_HTTP_TRIGGER_URL/api/funqyHello
    

    A kimenetnek meg kell egyeznie a korábban megfigyelt kimenettel:

    "hello funqy"
    

    Ha az Azure Portalon szeretné gyakorolni az alapvető metrikák képességeit, próbálja meg a függvényt egy rendszerhéjhurkon for belül invokolni:

    for i in {1..100}; do curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting; done
    

    Egy idő után megjelenik néhány metrikák adatai a portálon.

    Screenshot that shows function metrics in the portal.

Most, hogy megnyitotta az Azure-függvényt a portálon, az alábbi funkciók érhetők el a portálról:

Clean up resources

Ha nincs szüksége ezekre az erőforrásokra, törölheti őket az alábbi parancs futtatásával az Azure Cloud Shellben vagy a helyi terminálon:

az group delete --name <yourResourceGroupName> --yes

Következő lépések

Ebben a cikkben megtanulta, hogyan:

  • Futtassa a Quarkus fejlesztői módot.
  • Funqy-alkalmazás üzembe helyezése az Azure Functionsben a következő használatával azure-functions-maven-plugin: .
  • Vizsgálja meg a függvény teljesítményét a portálon.

Az Azure Functionsről és a Quarkusról az alábbi cikkekben és hivatkozásokban talál további információt: