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ű AzureWebJobsStorage
alkalmazá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:
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:
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: