Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule utworzysz, skompilujesz i wdrożysz bezserwerową aplikację Java w usłudze Azure Functions przy użyciu aplikacji Quarkus. W tym artykule użyto biblioteki Quarkus Funqy i wbudowanej obsługi wyzwalacza HTTP usługi Azure Functions dla języka Java. Korzystanie z aplikacji Quarkus z usługą Azure Functions zapewnia możliwości modelu programowania Quarkus z skalowaniem i elastycznością usługi Azure Functions. Po zakończeniu uruchomisz bezserwerowe aplikacje Quarkus w usłudze Azure Functions i będziesz nadal monitorować aplikację na platformie Azure.
Wymagania wstępne
- Interfejs wiersza polecenia platformy Azure zainstalowany na własnym komputerze.
- Konto platformy Azure. Jeśli nie masz jeszcze konta platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
-
Java JDK 17 z
JAVA_HOMEodpowiednio skonfigurowanym. Ten artykuł został napisany z myślą o języku Java 17, ale usługi Azure Functions i Quarkus obsługują również starsze wersje języka Java. - Apache Maven 3.8.1+.
Tworzenie projektu aplikacji
Użyj następującego polecenia, aby sklonować przykładowy projekt Java dla tego artykułu. Przykład znajduje się w witrynie GitHub.
git clone https://github.com/Azure-Samples/quarkus-azure
cd quarkus-azure
git checkout 2023-01-10
cd functions-quarkus
Jeśli zostanie wyświetlony komunikat o stanie detached HEAD, można go zignorować. Ponieważ ten artykuł nie wymaga żadnych zatwierdzeń, tryb odłączenia HEAD jest odpowiedni.
Zapoznaj się z przykładową funkcją. Otwórz plik functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java.
Uruchom następujące polecenie. Adnotacja @Funq powoduje, że metoda (w tym przypadku funqyHello) jest funkcją bezserwerową.
@Funq
public String funqyHello() {
return "hello funqy";
}
Język Java usługi Azure Functions ma własny zestaw adnotacji specyficznych dla platformy Azure, ale te adnotacje nie są konieczne, gdy używasz Quarkus w usłudze Azure Functions w podstawowym zakresie, tak jak tutaj. Aby uzyskać więcej informacji na temat adnotacji języka Java usługi Azure Functions, zobacz Przewodnik dla deweloperów języka Java usługi Azure Functions.
Jeśli nie określisz inaczej, nazwa funkcji jest taka sama jak nazwa metody. Możesz również użyć następującego polecenia, aby zdefiniować nazwę funkcji z parametrem adnotacji:
@Funq("alternateName")
public String funqyHello() {
return "hello funqy";
}
Nazwa jest ważna. Staje się częścią identyfikatora URI REST w celu wywołania funkcji, jak pokazano w dalszej części artykułu.
Lokalne testowanie funkcji
Użyj mvn polecenia , aby uruchomić tryb deweloperski Quarkus w lokalnym terminalu. Uruchamianie aplikacji Quarkus w ten sposób umożliwia ponowne ładowanie na żywo przy użyciu kompilacji w tle. Podczas modyfikowania plików Java i/lub plików zasobów i odświeżania przeglądarki te zmiany zostaną automatycznie zastosowane.
Odświeżanie przeglądarki wyzwala skanowanie obszaru roboczego. Jeśli skanowanie wykryje jakiekolwiek zmiany, pliki Java zostaną ponownie skompilowane, a aplikacja zostanie ponownie wdrożona. Twoje ponownie wdrożone aplikacje obsługują żądanie. Jeśli występują problemy z kompilacją lub wdrożeniem, zostanie wyświetlona strona błędu.
W poniższej procedurze zastąp ciąg yourResourceGroupName nazwą grupy zasobów. Nazwy aplikacji funkcji muszą być globalnie unikatowe na całej platformie Azure. Nazwy grup zasobów muszą być globalnie unikatowe w ramach subskrypcji. W tym artykule osiągnięto niezbędną unikatowość, poprzedzając nazwę grupy zasobów nazwą funkcji. Rozważ utworzenie unikatowego identyfikatora dla wszystkich utworzonych nazw, które muszą być unikatowe. Przydatną techniką jest użycie inicjałów, po których następuje dzisiejsza data w formacie mmdd.
Grupa zasobów nie jest konieczna w tej części instrukcji, ale jest wymagana później. Dla uproszczenia projekt Maven wymaga zdefiniowania właściwości .
Wywołaj tryb deweloperski Quarkus:
mvn -DskipTests -DresourceGroup=<yourResourceGroupName> quarkus:devDane wyjściowe powinny wyglądać podobnie do poniższych:
... --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 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>Uzyskaj dostęp do funkcji przy użyciu polecenia w terminalu
CURLlokalnym:curl localhost:8080/api/funqyHelloDane wyjściowe powinny wyglądać podobnie do poniższych:
"hello funqy"
Dodawanie wstrzykiwania zależności do funkcji
Technologia otwartego standardu Jakarta EE Contexts and Dependency Injection (CDI) jest stosowana do wstrzykiwania zależności w Quarkus.
Dodaj nową funkcję, która używa wstrzykiwania zależności.
Utwórz plik GreetingService.java w katalogu functions-quarkus/src/main/java/io/quarkus. Użyj następującego kodu jako kodu źródłowego pliku:
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; } }Zapisz plik.
GreetingServicejest beanem referencyjnym, który implementuje metodęgreeting(). Metoda zwracaWelcome...komunikat tekstowy z parametremname.Otwórz istniejący plik functions-quarkus/src/main/java/io/quarkus/GreetingFunction.java . Zastąp klasę następującym kodem, aby dodać nowe
gServicepole i metodęgreeting: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"; } }Zapisz plik.
Uzyskaj dostęp do nowej
greetingfunkcji przy użyciu polecenia w terminalucurllokalnym:curl -d '"Dan"' -X POST localhost:8080/api/greetingDane wyjściowe powinny wyglądać podobnie do poniższych:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan"Ważne
Kodowanie na żywo (nazywane również trybem deweloperskim) umożliwia uruchamianie aplikacji i wprowadzanie zmian na bieżąco. Quarkus automatycznie ponownie skompiluje i załaduje aplikację po wprowadzeniu zmian. Jest to zaawansowany i wydajny styl opracowywania, którego będziesz używać w tym artykule.
Przed przejściem do przodu do następnego kroku zatrzymaj tryb deweloperski Quarkus, wybierając Ctrl+C.
Wdrażanie aplikacji na platformie Azure
Jeśli jeszcze tego nie zrobiono, zaloguj się do subskrypcji platformy Azure przy użyciu następującego polecenia az login i postępuj zgodnie z instrukcjami wyświetlanymi na ekranie:
az loginUwaga
Jeśli wiele dzierżaw platformy Azure jest skojarzonych z poświadczeniami platformy Azure, musisz określić dzierżawę, do której chcesz się zalogować. Można to zrobić przy użyciu
--tenantopcji . Na przykład:az login --tenant contoso.onmicrosoft.com.Kontynuuj proces w przeglądarce internetowej. Jeśli żadna przeglądarka internetowa nie jest dostępna lub nie można otworzyć przeglądarki internetowej, użyj uwierzytelniania za pomocą kodu urządzenia z
az login --use-device-code.Po pomyślnym zalogowaniu dane wyjściowe w terminalu lokalnym powinny wyglądać podobnie do następujących:
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" } } ]Kompilowanie i wdrażanie funkcji na platformie Azure.
Plik pom.xml wygenerowany w poprzednim kroku używa polecenia
azure-functions-maven-plugin. Uruchomieniemvn installgeneruje pliki konfiguracji i katalog przejściowy, któryazure-functions-maven-pluginwymaga. W przypadkuyourResourceGroupNameużyj wartości użytej wcześniej.mvn clean install -DskipTests -DtenantId=<your tenantId from shown previously> -DresourceGroup=<yourResourceGroupName> azure-functions:deployPodczas wdrażania zaloguj się na platformie Azure. Wtyczka
azure-functions-maven-pluginjest skonfigurowana do monitowania o logowanie do platformy Azure przy każdym wdrożeniu projektu. Podczas kompilacji są wyświetlane dane wyjściowe podobne do następujących:[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.Zrób to, co mówi komunikat wyjściowy, i uwierzytelnij się na platformie Azure za pomocą przeglądarki internetowej oraz podanego kodu urządzenia. Dostępnych jest wiele innych opcji uwierzytelniania i konfiguracji. Pełną dokumentację referencyjną dla
azure-functions-maven-pluginmożna znaleźć na stronie Azure Functions: Szczegóły konfiguracji.Po uwierzytelnieniu kompilacja powinna być kontynuowana i zakończona. Upewnij się, że w danych wyjściowych znajduje się
BUILD SUCCESSblisko końca.Successfully deployed the artifact to https://quarkus-demo-123451234.azurewebsites.netAdres URL wyzwalający funkcję na platformie Azure można również znaleźć w dzienniku danych wyjściowych:
[INFO] HTTP Trigger Urls: [INFO] quarkus : https://quarkus-azure-functions-http-archetype-20220629204040017.azurewebsites.net/api/{*path}Ukończenie wdrożenia zajmie trochę czasu. W międzyczasie przyjrzyjmy się usłudze Azure Functions w witrynie Azure Portal.
Uzyskiwanie dostępu do funkcji bezserwerowej i monitorowanie jej na platformie Azure
Zaloguj się do portalu i upewnij się, że wybierasz tę samą dzierżawcę i subskrypcję, którą używasz w interfejsie wiersza polecenia platformy Azure.
Wpisz Function App w pasku wyszukiwania na górze portalu Azure i naciśnij klawisz Enter. Aplikacja funkcji powinna zostać wdrożona i wyświetlona z nazwą
<yourResourceGroupName>-function-quarkus.
Wybierz aplikację funkcji, aby wyświetlić szczegółowe informacje, takie jak lokalizacja, subskrypcja, adres URL, metryki i plan usługi aplikacji. Następnie wybierz wartość adresu URL .
Upewnij się, że strona powitalna wskazuje, że aplikacja funkcji działa poprawnie.
Wywołaj
greetingfunkcję przy użyciu następującegocurlpolecenia w terminalu lokalnym.Ważne
Zastąp
YOUR_HTTP_TRIGGER_URLwłasnym adresem URL funkcji, który znajdziesz w portalu Azure lub w wyniku.curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greetingDane wyjściowe powinny wyglądać mniej więcej tak:
"Welcome to build Serverless Java with Quarkus on Azure Functions, Dan on Azure"Dostęp do drugiej funkcji (
funqyHello) można również uzyskać przy użyciu następującegocurlpolecenia:curl https://YOUR_HTTP_TRIGGER_URL/api/funqyHelloDane wyjściowe powinny być takie same jak obserwowane wcześniej:
"hello funqy"Jeśli chcesz używać podstawowej funkcji metryk w Azure portal, spróbuj wywołać funkcję w pętli powłoki
for.for i in {1..100}; do curl -d '"Dan on Azure"' -X POST https://YOUR_HTTP_TRIGGER_URL/api/greeting; donePo pewnym czasie w portalu zostaną wyświetlone dane metryk.
Teraz, po otwarciu funkcji platformy Azure w portalu, poniżej przedstawiono więcej funkcji, do których możesz uzyskać dostęp z portalu:
- Monitoruj wydajność funkcji platformy Azure. Aby uzyskać więcej informacji, zobacz Monitorowanie usługi Azure Functions.
- Eksplorowanie danych telemetrycznych. Aby uzyskać więcej informacji, zobacz Analizowanie danych telemetrycznych usługi Azure Functions w usłudze Application Insights.
- Ustaw rejestrowanie. Aby uzyskać więcej informacji, zobacz Włączanie dzienników wykonywania przesyłania strumieniowego w usłudze Azure Functions.
Czyszczenie zasobów
Jeśli te zasoby nie są potrzebne, możesz je usunąć, uruchamiając następujące polecenie:
az group delete --name <yourResourceGroupName> --yes
Następne kroki
W tym artykule zawarto informacje na temat wykonywania następujących czynności:
- Uruchom tryb deweloperski Quarkus.
- Wdróż aplikację Funqy w usłudze Azure Functions przy użyciu polecenia
azure-functions-maven-plugin. - Sprawdź wydajność funkcji w portalu.
Aby dowiedzieć się więcej na temat usług Azure Functions i Quarkus, zobacz następujące artykuły i odwołania: