编辑此页面

Azure Functions

quarkus-azure-functions 扩展是 Azure Functions 和 Quarkus 之间的一个简单集成点。它与 Azure Functions 运行时交互以引导 Quarkus,并将您编写的任何 Azure Functions 类转换为 CDI/Arc bean。

这允许您将 Quarkus 初始化的任何服务或组件直接注入到您的函数类中。如果您希望您的函数类成为单例,您也可以将函数类的生命周期从请求作用域(默认)更改为应用程序作用域。

import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;

import jakarta.inject.Inject;
import java.util.Optional;

public class Function {
    @Inject
    GreetingService service;

    @FunctionName("HttpExample")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.GET, HttpMethod.POST},
                authLevel = AuthorizationLevel.ANONYMOUS)
                HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {

        // Parse query parameter
        final String query = request.getQueryParameters().get("name");
        final String name = request.getBody().orElse(query);

        if (name == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
        } else {
            return request.createResponseBuilder(HttpStatus.OK).body(service.greeting(name)).build();
        }
    }
}

此技术被认为是预览版。

预览版中,不保证向后兼容性和在生态系统中的存在。具体的改进可能需要更改配置或 API,成为稳定版的计划正在进行中。欢迎在我们的邮件列表或我们的 GitHub 问题跟踪器中提供反馈。

有关可能的完整状态列表,请查看我们的常见问题解答条目

先决条件

要完成本指南,您需要

解决方案

本指南将引导您运行一个 Maven 项目,该项目可以部署一个 Http Trigger Azure Function 类。此函数类注入一个 CDI bean 服务,该服务生成一个问候消息,该消息将传递回客户端。

创建 Maven/Gradle 项目

您可以从 Quarkus 的在线应用程序生成器生成示例代码,地址为 此链接

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

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

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

检查项目

如果您打开生成的项目的 pom.xmlbuild.gradle 构建文件,您会看到该项目与任何其他 Quarkus 项目类似。 quarkus-azure-functions 扩展是 Quarkus 和 Azure Functions 之间的集成点。它向 Azure Functions 运行时注册回调,以引导 Quarkus 并将 Quarkus/Arc 设置为函数类的函数工厂。

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

构建配置现在都在 application.properties 中。唯一需要的配置开关是 quarkus.azure-functions.app-name

Azure 部署描述符

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

Quarkus 开发模式

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

在 Azure Functions 本地环境中本地运行

如果您想在本地 Azure Functions 环境中尝试您的应用程序,您可以使用此命令

./mvnw quarkus:run

./gradlew --info --no-daemon quarkusRun

Gradle 在进程管理方面有点奇怪,因此您需要 --no-daemon 开关,否则 control-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

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

az login

部署到 Azure

quarkus-azure-functions 扩展处理部署到 Azure 的所有工作。默认情况下,Quarkus 将在后台使用 Azure CLI 来进行身份验证并部署到 Azure。如果您的帐户关联了多个订阅,则必须在您的 application.properties 文件中设置 quarkus.azure-functions.subscription-id 属性,以指定您要使用的订阅。有关其他身份验证机制和部署选项,请参阅我们的配置属性此处

要运行部署,在构建项目后执行

./mvnw quarkus:deploy

./gradlew --info deploy

如果部署成功,Quarkus 会将示例函数的端点 URL 输出到控制台。对于 Gradle,您必须使用 --info 开关才能看到此输出!

[INFO] HTTP Trigger Urls:
[INFO] 	 HttpExample : https://{appName}.azurewebsites.net/api/httpexample

访问该服务的 URL 将是

相关内容