该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用 spring-cloud-function 5.0.0spring-doc.cadn.net.cn

谷歌云功能

Google Cloud Functions 适配器使 Spring Cloud Function 应用能够在 Google Cloud Functions 无服务器平台上运行。你可以选择本地运行该函数,使用开源的 Java Google Functions 框架,或在 GCP 上运行。spring-doc.cadn.net.cn

项目依赖关系

首先添加以下内容Spring-cloud-function-adapter-gcp对项目的依赖。spring-doc.cadn.net.cn

<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-function-adapter-gcp</artifactId>
	</dependency>

	...
</dependencies>

此外,添加Spring-boot-Maven-插件该功能将构建用于部署的JAR。spring-doc.cadn.net.cn

注意我们也提到了Spring-cloud-function-adapter-gcp作为 的依赖关系Spring-boot-Maven-插件. 这是必要的,因为它修改插件,使你的函数以正确的JAR格式打包,以便在Google Cloud Functions上部署。
<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<configuration>
		<outputDirectory>target/deploy</outputDirectory>
	</configuration>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-function-adapter-gcp</artifactId>
		</dependency>
	</dependencies>
</plugin>

最后,添加作为 Google Functions Framework for Java 一部分提供的 Maven 插件。这允许你通过MVN 函数:run.spring-doc.cadn.net.cn

函数目标应始终设置为org.springframework.cloud.function.adapter.gcp.GcfJarLauncher; 这是一个适配器类,作为从 Google Cloud Functions 平台访问 Spring Cloud 函数的入口。
<plugin>
	<groupId>com.google.cloud.functions</groupId>
	<artifactId>function-maven-plugin</artifactId>
	<version>0.9.1</version>
	<configuration>
		<functionTarget>org.springframework.cloud.function.adapter.gcp.GcfJarLauncher</functionTarget>
		<port>8080</port>
	</configuration>
</plugin>

一个完整的工作示例pom.xml可在Spring Cloud Functions的GCP样本中找到。spring-doc.cadn.net.cn

HTTP 函数

Google Cloud Functions 支持部署 HTTP 函数,即通过 HTTP 请求调用的函数。以下章节描述了如何将 Spring Cloud 函数作为 HTTP 函数部署的说明。spring-doc.cadn.net.cn

开始

让我们先从一个简单的春季云函数示例开始:spring-doc.cadn.net.cn

@SpringBootApplication
public class CloudFunctionMain {

	public static void main(String[] args) {
		SpringApplication.run(CloudFunctionMain.class, args);
	}

	@Bean
	public Function<String, String> uppercase() {
		return value -> value.toUpperCase();
	}
}

资源/元步兵/显现。魔法师.spring-doc.cadn.net.cn

Main-Class: com.example.CloudFunctionMain

然后在本地运行该函数。这由谷歌云函数提供函数-专家插件详见项目依赖部分。spring-doc.cadn.net.cn

mvn function:run

调用HTTP函数:spring-doc.cadn.net.cn

curl http://localhost:8080/ -d "hello"

构建并部署到 GCP

首先打包你的申请。spring-doc.cadn.net.cn

mvn package

如果你添加了自定义Spring-boot-Maven-插件插件定义在上面,你应该能看到得到的 JAR目标/部署目录。 该 JAR 格式正确,适合部署到 Google Cloud Functions。spring-doc.cadn.net.cn

接下来,确保你安装了Cloud SDK CLIspring-doc.cadn.net.cn

在项目基础目录中执行以下部署命令。spring-doc.cadn.net.cn

gcloud functions deploy function-sample-gcp-http \
--entry-point org.springframework.cloud.function.adapter.gcp.GcfJarLauncher \
--runtime java11 \
--trigger-http \
--source target/deploy \
--memory 512MB

调用HTTP函数:spring-doc.cadn.net.cn

curl https://REGION-PROJECT_ID.cloudfunctions.net/function-sample-gcp-http -d "hello"

设置自定义HTTP状态码:spring-doc.cadn.net.cn

Functions can specify a custom HTTP response code by setting the `FunctionInvoker.HTTP_STATUS_CODE` header.
@Bean
public Function<String, Message<String>> function() {

	String payload = "hello";

	Message<String> message = MessageBuilder.withPayload(payload).setHeader(FunctionInvoker.HTTP_STATUS_CODE, 404).build();

	return input -> message;
};

背景功能

Google Cloud Functions 还支持部署后台函数,这些功能在响应事件时间接调用,例如云发布/订阅主题的消息、云存储桶的变化或 Firebase 事件。spring-doc.cadn.net.cn

Spring-cloud-function-adapter-gcp也允许将函数作为后台功能部署。spring-doc.cadn.net.cn

以下章节描述了编写云发布/子主题后台函数的过程。然而,有许多不同的事件类型可以触发后台函数执行,这些在这里未讨论;这些内容在后台函数触发器文档中有描述。spring-doc.cadn.net.cn

GCP入门

让我们先用一个简单的 Spring Cloud 函数,它将作为 GCF 的后台函数运行:spring-doc.cadn.net.cn

@SpringBootApplication
public class BackgroundFunctionMain {

	public static void main(String[] args) {
		SpringApplication.run(BackgroundFunctionMain.class, args);
	}

	@Bean
	public Consumer<PubSubMessage> pubSubFunction() {
		return message -> System.out.println("The Pub/Sub message data: " + message.getData());
	}
}

此外,创作出版子信息项目中的类,定义如下。该类代表了在Pub/Sub主题事件中传递给函数的Pub/Sub事件结构spring-doc.cadn.net.cn

public class PubSubMessage {

	private String data;

	private Map<String, String> attributes;

	private String messageId;

	private String publishTime;

	public String getData() {
		return data;
	}

	public void setData(String data) {
		this.data = data;
	}

	public Map<String, String> getAttributes() {
		return attributes;
	}

	public void setAttributes(Map<String, String> attributes) {
		this.attributes = attributes;
	}

	public String getMessageId() {
		return messageId;
	}

	public void setMessageId(String messageId) {
		this.messageId = messageId;
	}

	public String getPublishTime() {
		return publishTime;
	}

	public void setPublishTime(String publishTime) {
		this.publishTime = publishTime;
	}

}

资源/元步兵/显现。魔法师.spring-doc.cadn.net.cn

Main-Class: com.example.BackgroundFunctionMain

然后在本地运行该函数。这由谷歌云函数提供函数-专家插件详见项目依赖部分。spring-doc.cadn.net.cn

mvn function:run

调用HTTP函数:spring-doc.cadn.net.cn

curl localhost:8080 -H "Content-Type: application/json" -d '{"data":"hello"}'

通过查看日志确认该函数被调用。spring-doc.cadn.net.cn

部署至GCP

要将你的后台功能部署到 GCP,首先要打包你的应用程序。spring-doc.cadn.net.cn

mvn package

如果你添加了自定义Spring-boot-Maven-插件插件定义在上面,你应该能看到得到的 JAR目标/部署目录。 该 JAR 格式正确,适合部署到 Google Cloud Functions。spring-doc.cadn.net.cn

接下来,确保你安装了Cloud SDK CLIspring-doc.cadn.net.cn

在项目基础目录中执行以下部署命令。spring-doc.cadn.net.cn

gcloud functions deploy function-sample-gcp-background \
--entry-point org.springframework.cloud.function.adapter.gcp.GcfJarLauncher \
--runtime java11 \
--trigger-topic my-functions-topic \
--source target/deploy \
--memory 512MB

Google Cloud 函数现在每次发布到指定主题的消息时都会调用该函数。--触发主题.spring-doc.cadn.net.cn

关于测试和验证后台函数的作流程,请参见运行GCF后台函数示例的说明。spring-doc.cadn.net.cn

示例函数

项目提供以下示例函数作为参考:spring-doc.cadn.net.cn