領先一步
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
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);
雖然核心資料物件及其對應的 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... 在 3.1 版本中,我們引入了對 CloudEvents 的支援,您可以閱讀關於此主題的部落格文章 第 1 部分 和 第 2 部分。此版本包含一些額外的增強功能和錯誤修復,以及透過與 CloudEvents Java SDK 整合來支援 io.cloudevents.CloudEvent
類型。為了結合 gRPC 和 CloudEvents,我們還提供了一個專用範例,展示了透過 gRPC 進行 CloudEvents 互動。
到目前為止,您應該都熟悉 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"}. . .
Spring Cloud Function AWS 整合的一些使用者已經知道,在 3.1.x 版本中,我們已透過 org.springframework.cloud.function.adapter.aws.FunctionInvoker
遷移到單一 AWS handler 模型,以支援多個 AWS 事件。這種方法的主要優點是您不再需要提供 AWS Handler 的最小實作(例如,RequestHandler
或 RequestStreamHandler
等)。您只需像平常一樣實作您的函數,並在將其部署到 AWS 時指定 org.springframework.cloud.function.adapter.aws.FunctionInvoker
作為 handler(有關更多詳細資訊,請參閱入門指南)。但多個並不意味著全部,在此版本中,我們添加了對更多事件的支援,特別是 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