共计 2839 个字符,预计需要花费 8 分钟才能阅读完成。
1.spring cloud function是什么?
serverless的faas的一种实现,这里暂不深究serverless,套用官方的一张图
2.如何使用?
新建springboot应用,笔者以maven为例,
<properties>
<java.version>11</java.version>
<spring.cloud-version>2020.0.3</spring.cloud-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-function-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
@Bean
public Function<String, String> uppercase() {
return String::toUpperCase;
}
curl -H “Content-Type: Text/plain” localhost:8080/uppercase -d “hello”
将会看到HELLO,一个简单的function就完成了;
3.JSON如何处理?
首先我们新建JavaBean如下
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private static final long serialVersionUID = 2058468470334825230L;
private Integer userId;
private String userName;
}
再添加2个function
public class GetUserByIdFunction implements Function<Integer, User> {
private final List<User> USERS = List.of(new User(1, "alice"), new User(2, "bob"));
@Override
public User apply(Integer userId) {
return USERS.stream().filter(user -> user.getUserId().equals(userId)).findFirst().orElse(new User(0,"not found"));
}
}
public class AddUserFunction implements Consumer<User> {
@Override
public void accept(User user) {
if (user == null){
return;
}
System.out.println(user);
}
}
注意此时我们这2个function并没有作为bean注入上下文,打开springboot配置文件添加一行配置(值为笔者的包名,需按需替换)
spring.cloud.function.scan.packages=cloud.mysteriousman.serverless.sample.function
有代码洁癖的小伙伴可能发现这行配置idea亮了,没错,就是亮了,idea无法进行元数据关联,但是配置没错,或许spring开发者忘记配置元数据了,也或许将来这个配置会移除;具体可查看ContextFunctionCatalogAutoConfiguration类,
废话不多说
curl -H “Content-Type: Text/plain” localhost:8080/getUserByIdFunction -d 1
输出{“userId”:1,”userName”:”alice”}
curl -H “Content-Type: application/json” localhost:8080/addUserFunction -d “{\”userId\”:3,\”userName\”:\”candy\”}”
控制台打印User(userId=3, userName=candy)
4.结束
恭喜,spring cloud function已有初步认识!