Spring Cloud Function 3.2 版本發布了!

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

Spring Cloud 2021.0.0 終於發布了,同時也帶來了 Spring Cloud Function 3.2

完整的特性、增強功能和錯誤修復列表請參閱此處,我想在本篇文章中重點介紹其中幾項並提供一些詳細資訊。

gRPC 支援

除了現有的透過 AWS LambdaRSocketSpring Cloud Stream 等方式調用函數之外,Spring Cloud Function 現在允許您透過 gRPC 調用函數。以下是兩種從中受益的方式。

Spring Message

鑑於 Spring Messaging 的廣泛應用,從 gRPC 支援中受益的一種方式是採用 Spring 的 Message。Spring Cloud Function 提供了 GrpcSpringMessage schema,其模型仿照 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);
}

這兩者都允許您產生所需的 Stub,以支援 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 相關,只是一個標準的 Spring-Boot 應用程式,帶有一個函數 Bean - 這才是 Spring Cloud Function 的真正價值)

以及一個透過 gRPC 調用它的方式範例

Message<byte[]> message = MessageBuilder.withPayload("\"hello gRPC\"".getBytes())
            .setHeader("foo", "bar")
            .build();
Message<byte[]> reply = GrpcUtils.requestReply(message);

Protobuf 擴充功能

雖然核心資料物件及其對應的 schema 是仿照 Spring Message 建模,並且可以表示幾乎任何物件,但有時您可能想要插入您自己的 schema 和 protobuf 服務。Spring Cloud Function 透過允許您開發自己的 protobuf 擴充功能來支援此功能。此類擴充功能只是另一個 Spring-Boot 專案,它依賴於 spring-cloud-function-grpc,並且必須提供 protoc 產生的構件,包括 io.grpc.BindableService 的實作和訊息 schema 的 MessageConverter 實作。Spring Cloud Function 將負責其餘部分。事實上,我們已經為 CloudEvents 提供了這樣一個現成的擴充功能。

更多詳細資訊請參閱此處

增強的 CloudEvents 支援

說到 CloudEvents... 在 3.1 版本中,我們引入了對 CloudEvents 的支援,您可以閱讀關於此主題的部落格文章 第 1 部分第 2 部分。此版本包含一些額外的增強功能和錯誤修復,以及透過與 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 http://localhost: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 handler 模型,以支援多個 AWS 事件。這種方法的主要優點是您不再需要提供 AWS Handler 的最小實作(例如,RequestHandlerRequestStreamHandler 等)。您只需像平常一樣實作您的函數,並在將其部署到 AWS 時指定 org.springframework.cloud.function.adapter.aws.FunctionInvoker 作為 handler(有關更多詳細資訊,請參閱入門指南)。但多個並不意味著全部,在此版本中,我們添加了對更多事件的支援,特別是 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 社群中所有即將到來的活動。

查看全部