A Java-függvény csatlakoztatása az Azure Storage-hoz

Azure Functions lehetővé teszi az Azure-szolgáltatások és más erőforrások függvényekhez való csatlakoztatását anélkül, hogy saját integrációs kódot kellene írnia. Ezek a kötések, amelyek bemenetet és kimenetet is képviselnek, a függvénydefinícióban vannak deklarálva. A kötések adatai a függvények számára paraméterekként vannak megadva. Az eseményindítók a bemeneti kötések egy speciális típusa. Bár egy függvénynek csak egy eseményindítója van, több bemeneti és kimeneti kötéssel is rendelkezhet. További információ: Azure Functions triggerek és kötések fogalmai.

Ez a cikk bemutatja, hogyan integrálhatja az előző rövid útmutatóban létrehozott függvényt egy Azure Storage-üzenetsorba. A függvényhez hozzáadott kimeneti kötés adatokat ír egy HTTP-kérésből egy üzenetsorba.

A legtöbb kötéshez olyan tárolt kapcsolati sztring szükséges, amelyet a Functions a kötött szolgáltatás eléréséhez használ. A kapcsolat megkönnyítése érdekében használja a függvényalkalmazással létrehozott Storage-fiókot. A fiókhoz való csatlakozás már egy nevű AzureWebJobsStoragealkalmazásbeállításban van tárolva.

Előfeltételek

Mielőtt elkezdené ezt a cikket, végezze el a Java rövid útmutatójának 1. részében szereplő lépéseket.

A függvényalkalmazás beállításainak letöltése

Már létrehozott egy függvényalkalmazást az Azure-ban a szükséges Storage-fiókkal együtt. A fiók kapcsolati sztring biztonságosan tárolva van az Azure-beli alkalmazásbeállításokban. Ebben a cikkben üzeneteket ír egy storage-üzenetsorba ugyanabban a fiókban. Ahhoz, hogy a függvény helyi futtatásakor csatlakozzon a Storage-fiókjához, le kell töltenie az alkalmazásbeállításokat a local.settings.json fájlba.

A projekt gyökerében futtassa a következő Azure Functions Core Tools parancsot a beállítások local.settings.json fájlba való letöltéséhez, és cserélje le a elemet <APP_NAME> a függvényalkalmazás nevére az előző cikkből:

func azure functionapp fetch-app-settings <APP_NAME>

Előfordulhat, hogy be kell jelentkeznie az Azure-fiókjába.

Fontos

Ez a parancs felülírja a meglévő beállításokat az Azure-beli függvényalkalmazás értékeivel.

Mivel titkos kódokat tartalmaz, a local.settings.json fájl soha nem lesz közzétéve, és ki kell zárni a verziókövetésből.

Szüksége lesz a értékreAzureWebJobsStorage, amely a Tárfiók kapcsolati sztring. Ezzel a kapcsolattal ellenőrizheti, hogy a kimeneti kötés a várt módon működik-e.

Bővítménycsomagok engedélyezése

A kötésbővítmények telepítésének legegyszerűbb módja a bővítménycsomagok engedélyezése. Ha engedélyezi a csomagokat, a bővítménycsomagok előre definiált készlete automatikusan települ.

A bővítménycsomagok engedélyezéséhez nyissa meg a host.json fájlt, és frissítse annak tartalmát úgy, hogy az megfeleljen a következő kódnak:

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[3.*, 4.0.0)"
    }
}

Most már hozzáadhatja a Storage kimeneti kötést a projekthez.

Kimeneti kötés hozzáadása

Egy Java-projektben a kötések kötési széljegyzetekként vannak definiálva a függvénymetódusban. A function.json fájl ezután automatikusan létrejön ezen széljegyzetek alapján.

Keresse meg a függvénykód helyét az src/main/java területen, nyissa meg a Function.java projektfájlt, és adja hozzá a következő paramétert a run metódusdefinícióhoz:

@QueueOutput(name = "msg", queueName = "outqueue", connection = "AzureWebJobsStorage") OutputBinding<String> msg

A msg paraméter egy OutputBinding<T> típus, amely sztringek gyűjteményét jelöli. Ezek a sztringek üzenetként lesznek megírva egy kimeneti kötésbe, amikor a függvény befejeződik. Ebben az esetben a kimenet egy nevű tárolási üzenetsor outqueue. A Storage-fiókhoz tartozó kapcsolati sztring a connection metódus állítja be. A Tárfiók kapcsolati sztring tartalmazó alkalmazásbeállítást kell megadnia ahelyett, hogy magát a kapcsolati sztring adja át.

A run metódusdefiníciónak most az alábbi példához hasonlóan kell kinéznie:

@FunctionName("HttpTrigger-Java")
public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION)  
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", connection = "AzureWebJobsStorage") 
        OutputBinding<String> msg, final ExecutionContext context) {
    ...
}

Kimeneti kötést használó kód hozzáadása

Most az új msg paraméter használatával írhat a kimeneti kötésbe a függvénykódból. Adja hozzá a következő kódsort a sikeres válasz előtt, hogy hozzáadja name az értékét a msg kimeneti kötéshez.

msg.setValue(name);

Kimeneti kötés használatakor nem kell az Azure Storage SDK-kódot használnia a hitelesítéshez, az üzenetsor-referenciák lekéréséhez vagy az adatok írásához. Ezeket a feladatokat a Functions futtatókörnyezet és az üzenetsor kimeneti kötése hajtja végre.

A run metódusnak most az alábbi példához hasonlóan kell kinéznie:

public HttpResponseMessage run(
        @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) 
        HttpRequestMessage<Optional<String>> request, 
        @QueueOutput(name = "msg", queueName = "outqueue", 
        connection = "AzureWebJobsStorage") OutputBinding<String> msg, 
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    // Parse query parameter
    String query = request.getQueryParameters().get("name");
    String name = request.getBody().orElse(query);

    if (name == null) {
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
        .body("Please pass a name on the query string or in the request body").build();
    } else {
        // Write the name to the message queue. 
        msg.setValue(name);

        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
    }
}

A tesztek frissítése

Mivel az archetípus tesztkészletet is létrehoz, frissítenie kell ezeket a teszteket, hogy kezelni tudja az új msg paramétert a run metódus aláírásában.

Keresse meg a tesztkód helyét az src/test/java területen, nyissa meg a Function.java projektfájlt, és cserélje le a kódsort //Invoke a következő kódra:

@SuppressWarnings("unchecked")
final OutputBinding<String> msg = (OutputBinding<String>)mock(OutputBinding.class);
final HttpResponseMessage ret = new Function().run(req, msg, context);

Most már készen áll az új kimeneti kötés helyi kipróbálására.

A függvény helyi futtatása

A korábbiakhoz hasonlóan a következő paranccsal hozza létre a projektet, és indítsa el helyileg a Functions-futtatókörnyezetet:

mvn clean package 
mvn azure-functions:run

Megjegyzés

Mivel engedélyezte a bővítménykötegeket a host.json fájlban, a Storage kötésbővítményt az indítás során letöltötte és telepítette, a többi Microsoft kötésbővítménnyel együtt.

Ahogy korábban is, aktiválja a függvényt a parancssorból a cURL használatával egy új terminálablakban:

curl -w "\n" http://localhost:7071/api/HttpTrigger-Java --data AzureFunctions

A kimeneti kötés ezúttal egy nevű outqueue üzenetsort is létrehoz a Storage-fiókban, és hozzáad egy üzenetet ezzel a sztringgel.

Ezután az Azure CLI-vel tekintheti meg az új üzenetsort, és ellenőrizheti, hogy hozzá lett-e adva egy üzenet. Az üzenetsort a Microsoft Azure Storage Explorer vagy a Azure Portal is megtekintheti.

A Tárfiók kapcsolatának beállítása

Nyissa meg a local.settings.json fájlt, és másolja ki a értékétAzureWebJobsStorage, amely a Storage-fiók kapcsolati sztring. Állítsa a AZURE_STORAGE_CONNECTION_STRING környezeti változót a kapcsolati sztring a Bash-paranccsal:

AZURE_STORAGE_CONNECTION_STRING="<STORAGE_CONNECTION_STRING>"

Amikor beállítja a kapcsolati sztring a AZURE_STORAGE_CONNECTION_STRING környezeti változóban, anélkül érheti el a Storage-fiókját, hogy minden alkalommal hitelesítést kellene megadnia.

A Storage-üzenetsor lekérdezése

Az az storage queue list paranccsal megtekintheti a társorokat a fiókjában, ahogyan az alábbi példában látható:

az storage queue list --output tsv

A parancs kimenete tartalmaz egy nevű üzenetsort outqueue, amely a függvény futtatásakor létrehozott üzenetsor.

Ezután az az storage message peek paranccsal tekintheti meg az üzenetsor üzenetsorában lévő üzeneteket, ahogyan az alábbi példában látható:

echo `echo $(az storage message peek --queue-name outqueue -o tsv --query '[].{Message:content}') | base64 --decode`

A visszaadott sztringnek meg kell egyeznie a függvény teszteléséhez küldött üzenetével.

Megjegyzés

Az előző példa dekódolja a visszaadott sztringet a base64-ből. Ennek az az oka, hogy a Queue Storage-kötések base64 sztringként írnak és olvasnak az Azure Storage-ba.

A projekt ismételt üzembe helyezése

A közzétett alkalmazás frissítéséhez futtassa újra a következő parancsot:

mvn azure-functions:deploy

Ismét használhatja a cURL-t az üzembe helyezett függvény teszteléséhez. A korábbiakhoz hasonlóan adja át a POST kérés törzsében lévő értéket AzureFunctions az URL-címre, ahogy az alábbi példában is látható:

curl -w "\n" https://fabrikam-functions-20190929094703749.azurewebsites.net/api/HttpTrigger-Java?code=zYRohsTwBlZ68YF.... --data AzureFunctions

A Storage-üzenetsor üzenetének ismételt vizsgálatával ellenőrizheti, hogy a kimeneti kötés a várt módon új üzenetet hoz-e létre az üzenetsorban.

Az erőforrások eltávolítása

Az ebben a gyűjteményben lévő többi rövid útmutató erre a rövid útmutatóra épül. Ha a következő rövid útmutatókkal vagy az oktatóanyagokkal folytatja a munkát, ne törölje az ebben a rövid útmutatóban létrehozott erőforrásokat. Ha nem tervezi a folytatást, a következő paranccsal törölje az ebben a rövid útmutatóban létrehozott összes erőforrást:

az group delete --name myResourceGroup

Válassza ki y , ha a rendszer kéri.

Következő lépések

Frissítette a HTTP által aktivált függvényt, hogy adatokat írjon egy Storage-üzenetsorba. A javai Azure Functions fejlesztéséről a Azure Functions Java fejlesztői útmutatójában, valamint az eseményindítók és kötések Azure Functions című témakörben talál további információt. A Java-függvényprojektek teljes példáiért tekintse meg a Java Functions-mintákat.

Ezután engedélyeznie kell az Application Insights monitorozását a függvényalkalmazáshoz: