具有 Quarkus REST、Undertow 或 Reactive Routes 的 Azure Functions
quarkus-azure-functions-http
扩展允许您使用 Quarkus REST(我们的 Jakarta REST 实现)、Undertow(servlet)、Reactive Routes 或 Funqy HTTP 编写微服务,并使这些微服务能够部署到 Azure Functions 运行时。换句话说,此扩展是 Azure Functions HttpTrigger 和 Quarkus HTTP API 系列之间的桥梁。一个 Azure Function 部署可以代表任意数量的 Jakarta REST、servlet、Reactive Routes 或 Funqy HTTP 端点。
此技术被认为是预览版。 目前处于预览阶段,不保证向后兼容性和在生态系统中的存在性。特定的改进可能需要更改配置或 API,并且我们正在计划使其成为稳定版本。欢迎通过我们的 邮件列表 或在我们的 GitHub issue tracker 中提交问题来提供反馈。 有关可能的完整状态列表,请查看我们的常见问题解答条目。 |
目前仅支持基于文本的媒体类型,因为 Java 版的 Azure Functions HTTP Trigger 不支持二进制格式 |
先决条件
要完成本指南,您需要
-
大约 15 分钟
-
一个 IDE
-
已安装 JDK 17+ 并正确配置了
JAVA_HOME
-
Apache Maven 3.9.9
-
如果您想使用它,可以选择 Quarkus CLI
-
如果您想构建本机可执行文件(或者如果您使用本机容器构建,则为 Docker),可以选择安装 Mandrel 或 GraalVM 并进行适当的配置
-
Azure 账户。免费账户也可以使用。
-
Azure Functions Core Tools 版本 4.x
解决方案
本指南将引导您完成运行一个 Maven 项目,该项目可以将 Quarkus REST 端点部署到 Azure Functions。虽然示例中仅提供了 Jakarta REST,但您可以轻松地将其替换为您选择的 HTTP 框架。
创建 Maven/Gradle 项目
您可以通过 Quarkus 在线应用程序生成器 此链接 生成示例代码。
您也可以使用 Quarkus CLI 生成此示例
quarkus create app --extension=quarkus-azure-functions-http
如果您想生成 Gradle 项目,请添加 --gradle
开关。
Quarkus 开发模式
Quarkus 开发模式只需将您的应用程序作为 HTTP 端点运行即可。在开发模式下,与 Azure Functions 本地运行时没有特殊的交互。
./mvnw clean package quarkus:dev
检查项目
如果您打开生成项目的 pom.xml
或 build.gradle
构建文件,您会发现该项目与其他 Quarkus 项目相似。quarkus-azure-functions-http
扩展是 Quarkus 和 Azure Functions 之间的集成点。
quarkus-azure-functions-http
扩展的当前实现不再需要 azure-functions-maven-plugin
或其 Gradle 等效插件。本地开发和 Azure Functions 的打包和部署现在都由 Quarkus 完成。
构建配置现在全部包含在 application.properties
中。唯一必需的配置开关是 quarkus.azure-functions.app-name
。
配置根路径
Azure Function 的默认路由前缀是 /api
。您所有的 Jakarta REST、Servlet、Reactive Routes 和 Funqy HTTP 端点都必须明确考虑到这一点。在生成的项目中,这由 application.properties
中的 quarkus.http.root-path
开关处理。
在 Azure Functions 本地环境中本地运行
如果您想在 Azure Functions 本地环境中尝试此示例,可以使用此命令
./mvnw quarkus:run
或
./gradlew --info --no-daemon quarkusRun
Gradle 在进程管理方面有点奇怪,所以您需要 --no-daemon
开关,否则 Ctrl+C 将无法干净地销毁进程,您将留下打开的端口。
请注意,您必须安装 Azure Functions Core Tools 才能使其正常工作!
访问示例的 URL 将是
Quarkus 集成测试
您可以使用 @QuarkusIntegrationTest
功能来实现集成测试。当这些集成测试运行时,将在集成测试期间启动本地 Azure Functions 环境。
对于 Maven
./mvnw -DskipITs=false verify
确保您使用 Maven 执行的任何集成测试都使用 *IT.java
文件模式,这样常规构建就不会执行测试。
对于 Gradle
./gradlew --info quarkusIntTest
确保您使用 Gradle 执行的任何集成测试都位于 src/integrationTest/java
中。存在于 src/test
中的集成测试将在正常构建中运行并失败。
部署到 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 将是