Azure Functions with Quarkus REST, Undertow, or Reactive Routes
quarkus-azure-functions-http
扩展允许您使用 Quarkus REST(我们的 Jakarta REST 实现)、Undertow(servlet)、Reactive Routes 或 Funqy HTTP 编写微服务,并使这些微服务能够部署到 Azure Functions 运行时。换句话说,此扩展是 Azure Functions HttpTrigger 和 Quarkus 系列 HTTP API 之间的桥梁。Azure 函数部署可以表示任意数量的 Jakarta REST、servlet、Reactive Routes 或 Funqy HTTP 端点。
:iokays-category: quarkus
:iokays-path: modules/ROOT/pages/_includes/extension-status.adoc
:keywords: Quarkus, 中文文档, 编程技术
该技术被认为是 {extension-status}。 有关可能状态的完整列表,请查看我们的 FAQ entry. |
目前只支持基于文本的媒体类型,因为 Azure Functions Java 的 HTTP 触发器不支持二进制格式。 |
Prerequisites
如要完成本指南,您需要:
-
Roughly 15 minutes
-
An IDE
-
安装了 JDK 17+,已正确配置
JAVA_HOME
-
Apache Maven ${proposed-maven-version}
-
如果你想使用 Quarkus CLI, 则可以选择使用
-
如果你想构建一个本机可执行文件(或如果你使用本机容器构建,则使用 Docker),则可以选择安装 Mandrel 或 GraalVM 以及 configured appropriately
Solution
本指南将指导您逐步运行一个 Maven 项目,该项目可以将 Quarkus REST 端点部署到 Azure Functions。虽然只提供 Jakarta REST 作为示例,但您可以轻松地用您选择的 HTTP 框架替换它。
Creating the Maven/Gradle Project
您可以在 this link 处的 Quarkus 在线应用程序生成器中生成示例代码。
你还可以使用 Quarkus CLI 生成此示例:
quarkus create app --extension=quarkus-azure-functions-http
如果你想生成 gradle 项目,请添加 @“1” 开关。
Quarkus dev mode
Quarkus 开发模式的工作原理只是将其应用程序作为 HTTP 端点运行。在开发模式下,与 Azure Functions 本地运行时没有特殊的交互。
./mvnw clean package quarkus:dev
Examining the project
如果您打开生成项目的 pom.xml
或 build.gradle
构建文件,您会发现该项目类似于任何其他 Quarkus 项目。quarkus-azure-functions-http
扩展是 Quarkus 和 Azure Functions 之间的集成点。
quarkus-azure-functions-http
扩展的当前实现不再需要 azure-functions-maven-plugin
或等效的 gradle。本地开发和 Azure Functions 打包和部署现在都由 Quarkus 完成。
构建配置现在都在 @“7” 内。唯一必需的配置开关是 @“8”。
Configuring Root Paths
Azure Functions 的默认路由前缀为 /api
。您的所有 Jakarta REST、Servlet、Reactive Routes 和 Funqy HTTP 端点必须显式考虑这一点。在生成的项目中,这由 application.properties
中的 quarkus.http.root-path
开关处理。
Run locally in Azure Functions local environment
如果您想在本地 Azure Functions 环境中尝试此示例,可以使用此命令
./mvnw quarkus:run
或
./gradlew --info --no-daemon quarkusRun
Gradle 在进程管理方面有点怪异,所以你需要 @“10” 开关或 ctrl-c 不会干净地销毁进程,你将会有打开的端口。
请注意,你必须安装 @“11” 才能使此项工作!
访问该示例的 URL 为:
[role="bare"][role="bare"]http://localhost:8081/api/hello
Quarkus Integration Testing
你可以使用 @“13” 功能实现集成测试。当这些集成测试运行时,本地 Azure Functions 环境将为集成测试期间启动。
对于 maven:
./mvnw -DskipITs=false verify
确保你使用 maven 执行的任何集成测试都使用 @“14” 文件模式,以便常规构建不执行测试。
对于 Gradle:
./gradlew --info quarkusIntTest
确保你使用 Gradle 执行的任何集成测试都位于 @“15” 中。存在于 @“16” 中的集成测试将随常规构建一起运行并失败。
Deploy to Azure
quarkus-azure-functions-http
扩展处理向 Azure 部署的所有工作。默认情况下,Quarkus 将在后台使用 Azure CLI 对 Azure 进行授权和部署。如果您有多个订阅与您的帐户相关联,您必须将 application.properties
文件中的 quarkus.azure-functions.subscription-id
属性设置为您要使用的订阅。有关其他身份验证机制和部署选项,请参阅我们的配置属性 here。
在构建好项目后,执行以下命令可运行该部署:
./mvnw quarkus:deploy
或
./gradlew --info deploy
如果部署成功,Quarkus 会将示例函数的端点 URL 输出到控制台。对于 Gradle,您必须使用 --info
开关才能看到此输出!
即
[INFO] HTTP Trigger Urls:
[INFO] HttpExample : https://{appName}.azurewebsites.net/api/{*path}
访问服务的 URL 类似于
[role="bare"][role="bare"]https://{appName}.azurewebsites.net/api/hello