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 问题跟踪器中提供反馈。 有关可能的完整状态列表,请查看我们的常见问题解答条目。 |
先决条件
要完成本指南,您需要
-
大约 15 分钟
-
一个 IDE
-
已安装 JDK 17+ 并正确配置了
JAVA_HOME
-
Apache Maven 3.9.9
-
如果您想使用它,可以选择 Quarkus CLI
-
如果您想构建本机可执行文件(或者如果您使用本机容器构建,则为 Docker),可以选择安装 Mandrel 或 GraalVM 并进行适当的配置
-
一个 Azure 帐户。免费帐户也可以使用。
-
Azure Functions Core Tools 4.x 版本
解决方案
本指南将引导您运行一个 Maven 项目,该项目可以部署一个 Http Trigger Azure Function 类。此函数类注入一个 CDI bean 服务,该服务生成一个问候消息,该消息将传递回客户端。
创建 Maven/Gradle 项目
您可以从 Quarkus 的在线应用程序生成器生成示例代码,地址为 此链接。
您也可以使用 Quarkus CLI 生成此示例
quarkus create app --extension=quarkus-azure-functions
如果要生成 Gradle 项目,请添加 --gradle
开关。
检查项目
如果您打开生成的项目的 pom.xml
或 build.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 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
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 将是