spring cloud function初探

2,033次阅读
没有评论

共计 2839 个字符,预计需要花费 8 分钟才能阅读完成。

1.spring cloud function是什么?

serverless的faas的一种实现,这里暂不深究serverless,套用官方的一张图

spring cloud function初探

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类,

spring cloud function初探

废话不多说

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已有初步认识!

正文完
 
mysteriousman
版权声明:本站原创文章,由 mysteriousman 2021-09-18发表,共计2839字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)