Spring Cloud Function 3.2 发布啦!

工程 | Oleg Zhurakousky | 2021年12月2日 | ...

Spring Cloud 2021.0.0 版本终于发布了,同时发布的还有 Spring Cloud Function 3.2

完整的特性、增强功能和错误修复列表可在此处查看,我将在本文中重点介绍其中一些内容并提供一些详细信息。

gRPC 支持

除了已经存在的通过AWS LambdaRSocketSpring Cloud Stream等调用函数的支持外,Spring Cloud Function 现在允许您通过gRPC调用函数。这有两种方法可以从中受益。

Spring 消息

鉴于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);

Protobuf 扩展

虽然核心数据对象及其对应的模式是根据 Spring Message 建模的,并且可以表示几乎任何对象,但在某些情况下,您可能希望插入您自己的模式和 protobuf 服务。Spring Cloud Function 通过允许您开发您自己的 protobuf 扩展来支持它。这样的扩展只是另一个 spring-boot 项目,它依赖于spring-cloud-function-grpc,并且必须提供protoc生成的工件,包括io.grpc.BindableService的实现和您消息模式的MessageConverter的实现。Spring Cloud Function 将负责其余工作。事实上,我们已经为CloudEvents提供了一个开箱即用的扩展。

更多详细信息可在此处查看

增强的 CloudEvents 支持

说到 CloudEvents……在 3.1 版本中,我们引入了对CloudEvents的支持,您可以阅读关于该主题的博客文章的第一部分第二部分。此版本还包含一些额外的增强功能和错误修复,以及通过与 CloudEvents Java SDK 集成对io.cloudevents.CloudEvent类型的支持。为了结合 gRPC 和 CloudEvents,我们还提供了一个专门的示例,演示了通过 gRPC 进行 CloudEvents 交互。

Actuator 端点到 FunctionCatalog

到目前为止,您应该都熟悉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"}. . .

AWS - API Gateway v2、改进的自定义运行时和对原生镜像的支持

API Gateway v2

一些 Spring Cloud Function AWS 集成的用户可能已经知道,在 3.1.x 中,我们已经通过org.springframework.cloud.function.adapter.aws.FunctionInvoker迁移到单一的 AWS _处理程序_模型以支持多个 AWS 事件。这种方法的主要好处是您不再需要提供 AWS 处理程序的最小实现(例如,RequestHandlerRequestStreamHandler等)。您只需像平时一样实现您的函数,并在将其部署到 AWS 时指定org.springframework.cloud.function.adapter.aws.FunctionInvoker作为处理程序(有关更多详细信息,请参阅入门)。但是_多个_并不意味着_所有_,在此版本中,我们添加了对一些更多事件的支持,特别是APIGatewayV2HTTPEventAPIGatewayV2HTTPResponse

AWS 自定义运行时

虽然主要在内部进行,并且最终用户不可见,但值得一提的是,对已经存在的AWS 自定义运行时的支持进行了额外改进,现在它依赖于框架提供的事件循环。

Spring Native

最后但并非最不重要的是,对支持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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,以加快您的进度。

了解更多

获得支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部