領先一步
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);
}
這些都允許您生成所需的存根,以支援 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);
雖然核心資料物件及其相應的模式是根據 Spring Message 建模的,並且可以表示幾乎任何物件,但有時您可能希望插入自己的模式和 protobuf 服務。Spring Cloud Function 透過允許您開發自己的 protobuf 擴充套件來支援這一點。這樣的擴充套件只是另一個依賴於 spring-cloud-function-grpc 的 spring-boot 專案,並且必須提供 protoc 生成的 artifact,包括 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://: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 handler 模型。這種方法的主要好處是,您不再需要提供 AWS Handler 的最小實現(例如,RequestHandler 或 RequestStreamHandler 等)。您只需像往常一樣實現您的函式,並在將其部署到 AWS 時將 org.springframework.cloud.function.adapter.aws.FunctionInvoker 指定為處理程式(有關更多詳細資訊,請參閱 入門)。但多個並不意味著所有,在此版本中,我們增加了對更多事件的支援,特別是 APIGatewayV2HTTPEvent 和 APIGatewayV2HTTPResponse。
雖然主要是內部的,對終端使用者不可見,但值得一提的是,對現有的 AWS 自定義執行時 支援進行了額外改進,該執行時現在依賴於框架提供的事件迴圈。
最後但同樣重要的是,對支援 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