编辑此页面

具有 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

  • 已安装 Azure CLI

解决方案

本指南将引导您完成运行一个 Maven 项目,该项目可以将 Quarkus REST 端点部署到 Azure Functions。虽然示例中仅提供了 Jakarta REST,但您可以轻松地将其替换为您选择的 HTTP 框架。

创建 Maven/Gradle 项目

您可以通过 Quarkus 在线应用程序生成器 此链接 生成示例代码。

您也可以使用 Quarkus CLI 生成此示例

quarkus create app --extension=quarkus-azure-functions-http

如果您想生成 Gradle 项目,请添加 --gradle 开关。

登录 Azure

如果您不登录 Azure,则无法进行部署。

az login

Quarkus 开发模式

Quarkus 开发模式只需将您的应用程序作为 HTTP 端点运行即可。在开发模式下,与 Azure Functions 本地运行时没有特殊的交互。

./mvnw clean package quarkus:dev

检查项目

如果您打开生成项目的 pom.xmlbuild.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 部署描述符

Azure Functions 的 host.json 部署描述符是自动生成的,但如果您需要覆盖它,请将其声明在项目根目录中,并在准备好时重新运行构建。

配置根路径

Azure Function 的默认路由前缀是 /api。您所有的 Jakarta REST、Servlet、Reactive Routes 和 Funqy HTTP 端点都必须明确考虑到这一点。在生成的项目中,这由 application.properties 中的 quarkus.http.root-path 开关处理。

登录 Azure

如果您不登录 Azure,则无法进行部署。

az login

Quarkus 开发模式

Quarkus 开发模式目前不适用于 Azure Functions。

在 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 将是

相关内容