领先一步
VMware 提供培训和认证,以加快您的进度。
了解更多Spring Cloud 2021.0.0 版本终于发布了,同时发布的还有 Spring Cloud Function 3.2
完整的特性、增强功能和错误修复列表可在此处查看,我将在本文中重点介绍其中一些内容并提供一些详细信息。
除了已经存在的通过AWS Lambda、RSocket、Spring Cloud Stream等调用函数的支持外,Spring Cloud Function 现在允许您通过gRPC调用函数。这有两种方法可以从中受益。
鉴于Spring Messaging 的广泛应用,利用 gRPC 支持的一种方法是采用 Spring 的Message
。Spring Cloud Function 提供了GrpcSpringMessage
模式,该模式模仿 Spring 的Message。它在内部转换为 Spring Message,以利用所有现有的Spring Messaging 支持。
message GrpcSpringMessage {
bytes payload = 1;
map<string, string> headers = 2;
}
它还定义了一个MessagingService
,公开了您可以选择的四种交互模式。
service MessagingService {
rpc biStream(stream GrpcSpringMessage) returns (stream GrpcSpringMessage);
rpc clientStream(stream GrpcSpringMessage) returns (GrpcSpringMessage);
rpc serverStream(GrpcSpringMessage) returns (stream GrpcSpringMessage);
rpc requestReply(GrpcSpringMessage) returns (GrpcSpringMessage);
}
这两者都允许您生成所需的存根,以支持在与 Spring Application Context 托管的函数交互时 gRPC 的真正多语言特性。
这是一个简单的示例
如果您在类路径中包含spring-cloud-function-grpc
,那么这是您最简单的应用程序上下文配置
@Configuration
public static class SampleConfiguration {
public static void main(String[] args) {
SpringApplication.run(SampleConfiguration.class, args);
}
@Bean
public Function<String, String> uppercase() {
return v -> v.toUpperCase();
}
}
(请注意,上面代码中没有任何内容与 gRPC 甚至远程相关,只是一个带有函数 bean 的标准 Spring-Boot 应用程序——Spring Cloud Function 的真正价值)
以及一个您可以通过 gRPC 调用它的示例
Message<byte[]> message = MessageBuilder.withPayload("\"hello gRPC\"".getBytes())
.setHeader("foo", "bar")
.build();
Message<byte[]> reply = GrpcUtils.requestReply(message);
虽然核心数据对象及其对应的模式是根据 Spring Message
建模的,并且可以表示几乎任何对象,但在某些情况下,您可能希望插入您自己的模式和 protobuf 服务。Spring Cloud Function 通过允许您开发您自己的 protobuf 扩展来支持它。这样的扩展只是另一个 spring-boot 项目,它依赖于spring-cloud-function-grpc
,并且必须提供protoc
生成的工件,包括io.grpc.BindableService
的实现和您消息模式的MessageConverter
的实现。Spring Cloud Function 将负责其余工作。事实上,我们已经为CloudEvents提供了一个开箱即用的扩展。
更多详细信息可在此处查看
说到 CloudEvents……在 3.1 版本中,我们引入了对CloudEvents的支持,您可以阅读关于该主题的博客文章的第一部分和第二部分。此版本还包含一些额外的增强功能和错误修复,以及通过与 CloudEvents Java SDK 集成对io.cloudevents.CloudEvent
类型的支持。为了结合 gRPC 和 CloudEvents,我们还提供了一个专门的示例,演示了通过 gRPC 进行 CloudEvents 交互。
到目前为止,您应该都熟悉FunctionCatalog
作为 Spring Cloud Function 的核心组件之一。但是直到现在,与它交互的唯一方法是通过直接引用。在此版本中,我们公开了一个 Actuator 端点,允许您通过http://<host>:<port>/actuator/functions
URL 访问它。例如,在启用functions
端点后,您可以
curl https://127.0.0.1:8080/actuator/functions
……查看显示FunctionCatalog
内容的输出,它应该类似于:
{"charCounter":
{"type":"FUNCTION","input-type":"string","output-type":"integer"},
"logger":
{"type":"CONSUMER","input-type":"string"},
"functionRouter":
{"type":"FUNCTION","input-type":"object","output-type":"object"},
"words":
{"type":"SUPPLIER","output-type":"string"}. . .
一些 Spring Cloud Function AWS 集成的用户可能已经知道,在 3.1.x 中,我们已经通过org.springframework.cloud.function.adapter.aws.FunctionInvoker
迁移到单一的 AWS _处理程序_模型以支持多个 AWS 事件。这种方法的主要好处是您不再需要提供 AWS 处理程序的最小实现(例如,RequestHandler
或RequestStreamHandler
等)。您只需像平时一样实现您的函数,并在将其部署到 AWS 时指定org.springframework.cloud.function.adapter.aws.FunctionInvoker
作为处理程序(有关更多详细信息,请参阅入门)。但是_多个_并不意味着_所有_,在此版本中,我们添加了对一些更多事件的支持,特别是APIGatewayV2HTTPEvent
和APIGatewayV2HTTPResponse
。
虽然主要在内部进行,并且最终用户不可见,但值得一提的是,对已经存在的AWS 自定义运行时的支持进行了额外改进,现在它依赖于框架提供的事件循环。
最后但并非最不重要的是,对支持Spring Native计划进行了多项改进,并且我们很高兴能够展示几个 AWS 示例(此处和此处),您可以轻松地将其编译成原生镜像并部署到 AWS,并看到显著的性能提升。有关 AWS 和 Spring Native 的更多详细信息,您可以观看此Spring One 演示文稿。
问题 - https://stackoverflow.com/questions/tagged/spring-cloud-function 问题跟踪器 - https://github.com/spring-cloud/spring-cloud-function/issues