搶佔先機
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 提供了仿照 Spring Message 建模的 GrpcSpringMessage
模式。它在內部被轉換為 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 應用程式上下文託管的函式互動時支援 gRPC 的真正多語言特性。
這是一個快速示例
假設您的 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
生成的工件,包括 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 handler 模型,以支援多種 AWS 事件。這種方法的主要優點是您不再需要提供 AWS Handler 的最小實現(例如 RequestHandler
或 RequestStreamHandler
等)。您所需要做的就是像通常一樣實現您的函式,並在將其部署到 AWS 時將 org.springframework.cloud.function.adapter.aws.FunctionInvoker
指定為 handler(更多詳細資訊請參閱入門指南)。但多種並不意味著所有,在此版本中,我們增加了一些額外的事件支援,特別是 APIGatewayV2HTTPEvent
和 APIGatewayV2HTTPResponse
。
雖然主要是內部改進,終端使用者不直接可見,但值得一提的是,對現有 AWS Custom Runtime 支援進行了額外改進,該支援現在依賴於框架提供的事件迴圈。
最後但同樣重要的是,為了支援 Spring Native initiative,我們進行了多項改進。為此,我們很高興能夠展示幾個 AWS 示例(此處和此處),您可以輕鬆地將它們編譯為原生映象並部署到 AWS,從而看到顯著的效能提升。有關 AWS 和 Spring Native 的更多詳細資訊,您可以觀看此 Spring One 演示。
問題 - https://stackoverflow.com/questions/tagged/spring-cloud-function 問題追蹤 - https://github.com/spring-cloud/spring-cloud-function/issues