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” 开关。

Login to Azure

如果你不登录到 Azure,你将无法部署。

az login

Quarkus dev mode

Quarkus 开发模式的工作原理只是将其应用程序作为 HTTP 端点运行。在开发模式下,与 Azure Functions 本地运行时没有特殊的交互。

./mvnw clean package quarkus:dev

Examining the project

如果您打开生成项目的 pom.xmlbuild.gradle 构建文件,您会发现该项目类似于任何其他 Quarkus 项目。quarkus-azure-functions-http 扩展是 Quarkus 和 Azure Functions 之间的集成点。

quarkus-azure-functions-http 扩展的当前实现不再需要 azure-functions-maven-plugin 或等效的 gradle。本地开发和 Azure Functions 打包和部署现在都由 Quarkus 完成。

构建配置现在都在 @“7” 内。唯一必需的配置开关是 @“8”。

Azure Deployment Descriptors

Azure Functions @“9” 部署描述符自动生成,但如果你需要覆盖它,请在项目的根目录中声明它并在准备就绪时重新运行构建。

Configuring Root Paths

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

Login to Azure

如果你不登录到 Azure,你将无法部署。

az login

Quarkus dev mode

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

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 类似于