Serverloze Java-apps implementeren met Quarkus in Azure Functions
In dit artikel ontwikkelt, bouwt en implementeert u een serverloze Java-app in Azure Functions met behulp van Quarkus. In dit artikel wordt Gebruikgemaakt van Quarkus Funqy en de ingebouwde ondersteuning voor de HTTP-trigger van Azure Functions voor Java. Het gebruik van Quarkus met Azure Functions biedt u de kracht van het Quarkus-programmeermodel met de schaal en flexibiliteit van Azure Functions. Wanneer u klaar bent, voert u serverloze Quarkus-toepassingen uit in Azure Functions en blijft u uw app bewaken in Azure.
Vereisten
- De Azure CLI is geïnstalleerd op uw eigen computer.
- Een Azure-account. Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.
- Java JDK 17 met
JAVA_HOME
de juiste configuratie. Dit artikel is geschreven met Java 17 in gedachten, maar Azure Functions en Quarkus ondersteunen ook oudere versies van Java. - Apache Maven 3.8.1+.
Het app-project maken
Gebruik de volgende opdracht om het Java-voorbeeldproject voor dit artikel te klonen. Het voorbeeld bevindt zich op GitHub.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-01-10
cd functions-quarkus
Als u een bericht ziet over een losgekoppelde HEAD-status , is dit bericht veilig te negeren. Omdat voor dit artikel geen doorvoeringen zijn vereist, is de losgekoppelde HEAD-status geschikt.
Verken de voorbeeldfunctie. Open het bestand functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java .
Voer de volgende opdracht uit. De @Funq
aantekening maakt uw methode (in dit geval funqyHello
) een serverloze functie.
@Funq
public String funqyHello() {
return "hello funqy";
}
Azure Functions Java heeft een eigen set Azure-specifieke aantekeningen, maar deze aantekeningen zijn niet nodig wanneer u Quarkus in Azure Functions gebruikt in een eenvoudige capaciteit, zoals we hier doen. Zie de Ontwikkelaarshandleiding voor Java voor Azure Functions voor meer informatie over Azure Functions Java-aantekeningen.
Tenzij u anders opgeeft, is de naam van de functie hetzelfde als de naam van de methode. U kunt ook de volgende opdracht gebruiken om de functienaam te definiëren met een parameter voor de aantekening:
@Funq("alternateName")
public String funqyHello() {
return "hello funqy";
}
De naam is belangrijk. Het wordt een onderdeel van de REST-URI om de functie aan te roepen, zoals verderop in het artikel wordt weergegeven.
De functie lokaal testen
Gebruik mvn
deze modus om quarkus-ontwikkelaarsmodus uit te voeren op uw lokale terminal. Door Quarkus op deze manier uit te voeren, kan live opnieuw worden geladen met compilatie op de achtergrond. Wanneer u uw Java-bestanden en/of uw resourcebestanden wijzigt en uw browser vernieuwt, worden deze wijzigingen automatisch van kracht.
Een browservernieuwing activeert een scan van de werkruimte. Als de scan wijzigingen detecteert, worden de Java-bestanden opnieuw gecompileerd en wordt de toepassing opnieuw geïmplementeerd. Uw opnieuw geïmplementeerde toepassingsservices de aanvraag. Als er problemen zijn met compilatie of implementatie, wordt u op een foutpagina op de hoogte gesteld.
Vervang in de volgende procedure door yourResourceGroupName
de naam van een resourcegroep. Namen van functie-apps moeten wereldwijd uniek zijn in azure. Namen van resourcegroepen moeten wereldwijd uniek zijn binnen een abonnement. In dit artikel wordt de benodigde uniekheid bereikt door de naam van de resourcegroep vooraf te laten gaan aan de functienaam. Overweeg om een unieke id toe te wijzen aan namen die u maakt die uniek moeten zijn. Een handige techniek is het gebruik van uw initialen, gevolgd door de datum van vandaag in mmdd
notatie.
De resourcegroep is niet nodig voor dit deel van de instructies, maar deze is later vereist. Voor het gemak vereist het Maven-project dat u de eigenschap definieert.
Quarkus-ontwikkelaarsmodus aanroepen:
cd functions-azure mvn -DskipTests -DresourceGroup=<yourResourceGroupName> quarkus:dev
De uitvoer moet er ongeveer als volgt uitzien:
... --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 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>
Open de functie met behulp van de
CURL
opdracht in uw lokale terminal:curl localhost:8080/api/funqyHello
De uitvoer moet er ongeveer als volgt uitzien:
"hello funqy"
Afhankelijkheidsinjectie toevoegen aan de functie
De open-standaard technologie Jakarta EE Contexts and Dependency Injection (CDI) biedt afhankelijkheidsinjectie in Quarkus. Zie de Jakarta EE-zelfstudie voor een algemeen overzicht van injectie in het algemeen en CDI.
Voeg een nieuwe functie toe die gebruikmaakt van afhankelijkheidsinjectie.
Maak een GreetingService.java-bestand in de map functions-quarkus/src/main/java/io/quarkus . Gebruik de volgende code als de broncode van het bestand:
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; } }
Sla het bestand op.
GreetingService
is een injecteerbare bean die eengreeting()
methode implementeert. De methode retourneert eenWelcome...
tekenreeksbericht met eenname
parameter.Open het bestaande bestand functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java . Vervang de klasse door de volgende code om een nieuw
gService
veld en degreeting
methode toe te voegen: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"; } }
Sla het bestand op.
Open de nieuwe
greeting
functie met behulp van decurl
opdracht in uw lokale terminal:curl -d '"Dan"' -X POST localhost:8080/api/greeting
De uitvoer moet er ongeveer als volgt uitzien:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan"
Belangrijk
Met Live Coding (ook wel dev-modus genoemd) kunt u de app uitvoeren en direct wijzigingen aanbrengen. Quarkus zal de app automatisch opnieuw compileren en opnieuw laden wanneer er wijzigingen worden aangebracht. Dit is een krachtige en efficiënte ontwikkelstijl die u in dit artikel gaat gebruiken.
Voordat u verdergaat met de volgende stap, stopt u de dev-modus quarkus door Ctrl+C te selecteren.
De app implementeren in Azure
Als u dat nog niet hebt gedaan, meldt u zich aan bij uw Azure-abonnement met behulp van de volgende az login-opdracht en volgt u de aanwijzingen op het scherm:
az login
Notitie
Als er meerdere Azure-tenants zijn gekoppeld aan uw Azure-referenties, moet u opgeven bij welke tenant u zich wilt aanmelden. U kunt dit doen met behulp van de
--tenant
optie. Voorbeeld:az login --tenant contoso.onmicrosoft.com
.Ga door met het proces in de webbrowser. Als er geen webbrowser beschikbaar is of als de webbrowser niet kan worden geopend, gebruikt u de apparaatcodestroom met
az login --use-device-code
.Nadat u zich hebt aangemeld, ziet de uitvoer op uw lokale terminal er ongeveer als volgt uit:
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" } } ]
Bouw en implementeer de functies in Azure.
Het pom.xml bestand dat u in de vorige stap hebt gegenereerd, maakt gebruik van
azure-functions-maven-plugin
. Als u deze uitvoertmvn install
, worden configuratiebestanden en een faseringsmap gegenereerd dieazure-functions-maven-plugin
vereist is. GebruikyourResourceGroupName
hiervoor de waarde die u eerder hebt gebruikt.mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deploy
Meld u tijdens de implementatie aan bij Azure. De
azure-functions-maven-plugin
invoegtoepassing is zo geconfigureerd dat telkens wanneer het project wordt geïmplementeerd, wordt gevraagd om u aan te melden bij Azure. Tijdens de build wordt uitvoer weergegeven die vergelijkbaar is met het volgende:[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.
Doe zoals in de uitvoer wordt vermeld en geverifieerd bij Azure met behulp van de browser en de opgegeven apparaatcode. Er zijn veel andere verificatie- en configuratieopties beschikbaar. De volledige referentiedocumentatie voor
azure-functions-maven-plugin
is beschikbaar in Azure Functions: Configuratiedetails.Na verificatie moet de build doorgaan en voltooien. Zorg ervoor dat de uitvoer bijna aan het einde is opgenomen
BUILD SUCCESS
.Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.net
U kunt ook de URL vinden om uw functie in Azure te activeren in het uitvoerlogboek:
[INFO] HTTP Trigger Urls: [INFO] quarkus : https://quarkus-azure-functions-http-archetype-20220629204040017.azurewebsites.net/api/{*path}
Het duurt even voordat de implementatie is voltooid. In de tussentijd gaan we Azure Functions verkennen in Azure Portal.
De serverloze functie in Azure openen en bewaken
Meld u aan bij de portal en zorg ervoor dat u dezelfde tenant en hetzelfde abonnement hebt geselecteerd dat u hebt gebruikt in de Azure CLI.
Typ de functie-app op de zoekbalk boven aan De Azure-portal en selecteer de Enter-toets. Uw functie-app moet worden geïmplementeerd en worden weergegeven met de naam
<yourResourceGroupName>-function-quarkus
.Selecteer de functie-app om gedetailleerde informatie weer te geven, zoals Locatie, Abonnement, URL, Metrische gegevens en App Service-plan. Selecteer vervolgens de URL-waarde .
Controleer of de welkomstpagina aangeeft dat uw functie-app 'actief' is.
Roep de
greeting
functie aan met behulp van de volgendecurl
opdracht in uw lokale terminal.Belangrijk
Vervang
YOUR_HTTP_TRIGGER_URL
door uw eigen functie-URL die u in Azure Portal of uitvoer vindt.curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting
De uitvoer moet er als volgt uitzien:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan on Azure"
U kunt ook toegang krijgen tot de andere functie (
funqyHello
) met behulp van de volgendecurl
opdracht:curl https://YOUR_HTTP_TRIGGER_URL/api/funqyHello
De uitvoer moet hetzelfde zijn als wat u eerder hebt waargenomen:
"hello funqy"
Als u de basisfunctie voor metrische gegevens in Azure Portal wilt gebruiken, kunt u proberen de functie binnen een shell-lus
for
aan te roepen:for i in {1..100}; do curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting; done
Na enige tijd ziet u enkele metrische gegevens in de portal.
Nu u uw Azure-functie in de portal hebt geopend, zijn hier meer functies die u vanuit de portal kunt openen:
- Bewaak de prestaties van uw Azure-functie. Voor meer informatie, zie Azure Functions bewaken.
- Telemetrie verkennen. Zie Azure Functions-telemetrie analyseren in Application Insights voor meer informatie.
- Logboekregistratie instellen. Zie Logboeken voor streaming-uitvoering inschakelen in Azure Functions voor meer informatie.
Resources opschonen
Als u deze resources niet nodig hebt, kunt u ze verwijderen door de volgende opdracht uit te voeren:
az group delete --name <yourResourceGroupName> --yes
Volgende stappen
In dit artikel hebt u het volgende geleerd:
- Voer de dev-modus Quarkus uit.
- Implementeer een Funqy-app in Azure-functies met behulp van
azure-functions-maven-plugin
. - Bekijk de prestaties van de functie in de portal.
Zie de volgende artikelen en verwijzingen voor meer informatie over Azure Functions en Quarkus: