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);
}

这些都允许您生成所需的存根,以支持 gRPC 的真正多语言特性,同时与 Spring 应用程序上下文中托管的函数进行交互。

这是一个快速示例

如果您的 classpath 中有 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-cloud-function-grpc 的 spring-boot 项目,并且必须提供 protoc 生成的 artifact,包括 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://: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,改进的自定义运行时和对 Native 镜像的支持

API Gateway v2

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

AWS 自定义运行时

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

Spring Native

最后但同样重要的是,对支持 Spring Native 计划进行了多项改进,我们很高兴能够展示几个 AWS 示例(此处此处),您可以轻松地将它们编译成 Native 镜像并部署到 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 社区所有即将举行的活动。

查看所有