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();
}
}
}
该技术被认为是 {extension-status}。 有关可能状态的完整列表,请查看我们的 FAQ entry. |
Prerequisites
如要完成本指南,您需要:
-
Roughly 15 minutes
-
An IDE
-
安装了 JDK 17+,已正确配置
JAVA_HOME
-
Apache Maven ${proposed-maven-version}
-
如果你想使用 Quarkus CLI, 则可以选择使用
-
如果你想构建一个本机可执行文件(或如果你使用本机容器构建,则使用 Docker),则可以选择安装 Mandrel 或 GraalVM 以及 configured appropriately
Creating the Maven/Gradle Project
您可以在 this link 上从 Quarkus 的在线应用程序生成器生成示例代码。
你还可以使用 Quarkus CLI 生成此示例:
quarkus create app --extension=quarkus-azure-functions
如果你想生成 gradle 项目,请添加 @“1” 开关。
Examining the project
如果你打开生成的项目中的 @“2” 或 @“3” 构建文件,你将看到该项目与任何其他 Quarkus 项目相似。@“4” 扩展是 Quarkus 和 Azure Functions 之间的集成点。它用 Azure Functions 运行时注册回调以引导 Quarkus 并将 Quarkus/Arc 设置为功能类的功能工厂。
@“5” 扩展的当前实现不再需要 @“6” 或 gradle 等效项。本地开发和 Azure Functions 打包和部署现在都由 Quarkus 完成。
构建配置现在都在 @“7” 内。唯一必需的配置开关是 @“8”。
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"]@“12”
Quarkus Integration Testing
你可以使用 @“13” 功能实现集成测试。当这些集成测试运行时,本地 Azure Functions 环境将为集成测试期间启动。
对于 maven:
./mvnw -DskipITs=false verify
确保你使用 maven 执行的任何集成测试都使用 @“14” 文件模式,以便常规构建不执行测试。
对于 Gradle:
./gradlew --info quarkusIntTest
确保你使用 Gradle 执行的任何集成测试都位于 @“15” 中。存在于 @“16” 中的集成测试将随常规构建一起运行并失败。
Deploy to Azure
@“17” 扩展处理所有部署到 Azure 的工作。默认情况下,Quarkus 将在后台使用 Azure CLI 来验证和部署到 Azure。如果你有多个订阅与你的帐户相关联,你必须将 @“19” 文件中的 @“18” 属性设置为你要使用的订阅。有关其他身份验证机制和部署选项,请参阅我们的配置文件 @“20”。
在构建好项目后,执行以下命令可运行该部署:
./mvnw quarkus:deploy
或
./gradlew --info deploy
如果部署成功,Quarkus 会将示例函数的端点 URL 输出到控制台。对于 Gradle,您必须使用 --info
开关才能看到此输出!
即
[INFO] HTTP Trigger Urls:
[INFO] HttpExample : https://{appName}.azurewebsites.net/api/httpexample
访问该服务的 URL 应为
[role="bare"][role="bare"]https://{appName}.azurewebsites.net/api/HttpExample