微软 Azure
Azure 适配器启动 Spring 云函数上下文,并从Azure引导函数调用 框架到用户函数中,必要时使用 Spring 引导配置。Azure Functions 具有相当独特和 侵入性编程模型,涉及特定于 Azure 平台的用户代码中的批注。 但是,重要的是要了解,由于Spring Cloud Function提供的集成风格,特别是这种基于注释的编程模型只是一种类型安全的配置方式。 要识别为 Azure 函数的简单 Java 函数(无法识别 Azure 的函数)。 您需要做的就是创建一个扩展、定义和配置函数处理程序方法的处理程序,并且 进行回调方法。此处理程序方法将输入和输出类型作为带批注的方法参数提供 (使 Azure 能够检查类并创建 JSON 绑定)。org.springframework.cloud.function.adapter.azure.FunctionInvoker
FunctionInvoker
handleRequest(..)
public class UppercaseHandler extends FunctionInvoker<Message<String>, String> {
@FunctionName("uppercase")
public String execute(@HttpTrigger(name = "req", methods = {HttpMethod.GET,
HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
ExecutionContext context) {
Message<String> message = MessageBuilder.withPayload(request.getBody().get()).copyHeaders(request.getHeaders()).build();
return handleRequest(message, context);
}
}
请注意,除了通过 Azure 注释提供配置的表单之外,我们在此处理程序方法的主体内创建一个实例,并对返回其结果的方法进行回调。Message
handleRequest(..)
您要延迟的实际用户功能如下所示
@Bean
public Function<String, String> uppercase() {
return payload -> payload.toUpperCase();
}
OR
@Bean
public Function<Message<String>, String> uppercase() {
return message -> message.getPayload().toUpperCase();
}
请注意,在创建消息时,您可以有效地复制 HTTP 标头,以便在必要时使用它们。
该类有两个有用的 可以将实际函数调用委托给的方法(and),因此大多数情况下该函数将只有一行。org.springframework.cloud.function.adapter.azure.FunctionInvoker
handleRequest
handleOutput
函数名称(定义)将从 Azure 的方法中检索,从而有效地支持应用程序上下文中的多个函数。ExecutionContext.getFunctionName()
访问 Azure ExecutionContext
有时需要以 的形式访问 Azure 运行时提供的目标执行上下文。 例如,其中一个需求是日志记录,因此它可以显示在 Azure 控制台中。com.microsoft.azure.functions.ExecutionContext
为此,FunctionInvoker 将添加一个实例作为消息标头,以便您可以通过 Trusted 检索它。ExecutionContext
executionContext
@Bean
public Function<Message<String>, String> uppercase(JsonMapper mapper) {
return message -> {
String value = message.getPayload();
ExecutionContext context = (ExecutionContext) message.getHeaders().get("executionContext");
. . .
}
}
关于JAR布局的说明
在 Azure 中运行时不需要 Spring Cloud Function Web,因此可以排除此 在创建部署到 Azure 的 JAR 之前,但如果包含它,则不会使用它,因此 把它留在里面也无妨。Azure 上的函数应用程序是由 Maven插件。该函数位于此项目生成的 JAR 文件中。 此示例使用精简布局将其创建为可执行 jar,以便 Azure 可以找到 处理程序类。如果您愿意,可以只使用常规的平面JAR文件。 不应包含依赖项。
构建文件设置
为了在Microsoft Azure上运行Spring Cloud Function应用程序,您可以利用Maven 云平台提供商提供的插件。
为了将适配器插件用于Maven,请将插件依赖项添加到您的文件中:pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-adapter-azure</artifactId>
</dependency>
</dependencies>
然后,配置插件。需要为你的 Azure 提供特定于 Azure 的配置 应用程序,指定 和其他可选属性,以及 添加目标执行,以便 Azure 所需的文件是 为您生成。完整的插件文档可以在插件存储库中找到。resourceGroup
appName
package
function.json
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-functions-maven-plugin</artifactId>
<configuration>
<resourceGroup>${functionResourceGroup}</resourceGroup>
<appName>${functionAppName}</appName>
</configuration>
<executions>
<execution>
<id>package-functions</id>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
您还必须确保插件要扫描的文件可以在 Azure 函数暂存目录(有关暂存目录及其默认位置的更多详细信息,请参阅插件存储库)。
您可以找到用于部署 Spring Cloud 函数的完整示例文件 应用程序到Microsoft Azure与Maven在这里。pom.xml
到目前为止,只有Maven插件可用。Gradle 插件尚未由 云平台提供商。 |
./mvnw -U clean package
您可以在本地运行示例,就像其他 Spring Cloud 函数示例一样:
和。curl -H "Content-Type: text/plain" localhost:8080/api/uppercase -d '{"value": "hello foobar"}'
您将需要 CLI 应用程序(有关更多详细信息,请参阅https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-first-java-maven)。若要在 Azure 运行时上部署函数,请执行以下操作:az
$ az login
$ mvn azure-functions:deploy
在另一个终端上尝试这个:。请确保为上述功能使用正确的 URL。或者,可以在 Azure 仪表板 UI 中测试函数(单击函数名称,转到右侧并单击“测试”,然后单击右下角的“运行”)。curl https://<azure-function-url-from-the-log>/api/uppercase -d '{"value": "hello foobar!"}'
Azure 示例中函数的输入类型是具有名为“值”的单个属性的 Foo。所以你需要这个来测试它,如下所示:
{
"value": "foobar"
}
Azure 示例应用以“非功能性”样式(使用)编写。函数式样式(使用 justor)在 Azure 中启动时比传统样式快得多,因此,如果您不需要(或)这是一个不错的选择。热启动不受影响。 |