Spring Cloud Function 快速入門

spring全家桶實戰案例 發佈 2022-03-16T05:30:16+00:00

環境:SpringBoot2.3.12.RELEASE + Spring Cloud 2020.0.5簡介Spring Cloud Function是一個具有以下高層目標的項目:通過函數促進業務邏輯的實現。

環境:SpringBoot2.3.12.RELEASE + Spring Cloud 2020.0.5


簡介

Spring Cloud Function是一個具有以下高層目標的項目:

  1. 通過函數促進業務邏輯的實現。
  2. 將業務邏輯的開發生命周期與任何特定的運行時目標解耦,這樣相同的代碼就可以作為web端點、流處理器或任務運行。
  3. 支持跨無伺服器(serverless)提供商的統一編程模型,以及獨立運行(本地或PaaS中)的能力。
  4. 在無服務(serverless)提供商上啟用Spring Boot特性(自動配置、依賴注入、指標)。

它抽象了所有的傳輸細節和基礎設施,允許開發人員保留所有熟悉的工具和流程,並將重點牢牢地放在業務邏輯上。如下示例:

@SpringBootApplication
public class Application {
  @Bean
  public Function<Flux<String>, Flux<String>> uppercase() {
    return flux -> flux.Map(value -> value.toUpperCase());
  }

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

如上,它只是一個Spring Boot應用程式,所以它可以在本地和CI構建中構建、運行和測試,就像其他Spring Boot應用程式一樣。該 Function來自 Java.util Flux 反應流發布者Publisher。可以通過HTTP或消息傳遞訪問該功能。

Spring Cloud Function 有4個主要的功能:

簡而言之,Spring Cloud Function提供了以下功能:Function、Consumer和Supplier類型的@Beans的包裝器,將它們作為HTTP端點或消息流偵聽器/發布者與RabbitMQ、Kafka等一起公開給外部使用。

  1. 編程風格的選擇——反應式、命令式或混合式。
  2. 函數組合和適配(例如,組合命令式函數和響應式函數)。
  3. 支持響應式函數,具有多個輸入和輸出,允許函數處理合併、連接和其他複雜的流操作。
  4. 輸入和輸出的透明類型轉換。
  5. 針對目標平台(例如,Project Riff, AWS Lambda等)的部署打包功能
  6. 將函數作為HTTP端點等對外公開的適配器。
  7. 使用獨立的類加載器部署包含此類應用程式上下文的JAR文件,以便可以將它們打包到單個JVM中。
  8. 將作為Java函數體的字符串編譯成字節碼,然後將它們轉換成可以像上面那樣包裝的@bean。
  9. 適用於AWS Lambda、Azure、Google Cloud Functions、Apache OpenWhisk和其他可能的「serverless」服務提供商的適配器。

案例應用

函數可以自動導出為HTTP端點。

Spring -cloud-function-web模塊具有自動配置功能,當它被包含在Spring Boot web應用程式中時(帶有MVC支持)就會被激活。如果你只是想要一個簡單的入門體驗,spring-cloud-starter- functional -web也可以收集所有可選的依賴項。

激活web配置後,你的應用將會有一個MVC端點(默認值為"/",但可以通過spring.cloud.function.web.path配置),它可以用來訪問應用上下文中的函數,其中函數名成為URL路徑的一部分。支持的內容類型是純文本和JSON。

編號

Method

Path

request

Response

Status

1

GET

/{supplier}

-

Items from the named supplier

200 OK

2

POST

/{consumer}

JSON object or text

Mirrors input and pushes request body into consumer

202 Accepted

3

POST

/{consumer}

JSON array or text with new lines

Mirrors input and pushes body into consumer one by one

202 Accepted

4

POST

/{function}

JSON object or text

The result of applying the named function

200 OK

5

POST

/{function}

JSON array or text with new lines

The result of applying the named function

200 OK

6

GET

/{function}/{item}

-

Convert the item into an object and return the result of applying the function

200 OK

針對以上6中情況,演示示例如下:

  • 1 GET /{supplier}
@Bean
public Function<Flux<String>, Flux<String>> uppercase() {
  return flux -> flux.map(value -> value.toUpperCase());
}

請求結果:

  • 2 POST /{consumer}
@Bean
public Consumer<Person> consumer1() {
  return person -> System.out.println("阻塞式調用:" + person) ;
}

請求結果:

  • 3 POST /{consumer}
@Bean
public Consumer<Flux<Person>> consumer2() {
  return person -> {
    person.subscribe(System.out::println) ;
  } ;
}

請求結果:

  • 4 POST /{consumer}
@Bean
public Consumer<Flux<Person>> consumer3() {
  return person -> {
    person.subscribe(System.out::println) ;
  } ;
}

請求結果:

  • 6 GET /{function}/{item}
@Bean
public Function<Flux<Person>, Flux<Map<String, Object>>> function1() {
  return person -> person.map(p -> {
    Map<String, Object> result = new HashMap<>() ;
    result.put("姓名", p.getName()) ;
    result.put("年齡", p.getAge()) ;
    return result ;
  }) ;
}

請求結果:

完畢!!!

spring data jpa 高級應用

Spring Retry重試框架的應用

Spring容器這些擴展點你都清楚了嗎?

Spring MVC 異步請求方式

Spring MVC 異常處理方式

Spring事務實現原理源碼分析

Spring 自定義Advisor以編程的方式實現AOP


SpringBoot WebFlux整合Spring Security進行權限認證

關鍵字: