1. Spring 响应式Web框架 介绍
之前已经写过几篇文章介绍了全新的响应式框架Quarkus,框架本身性能和社区支持都很不错。但是总觉的没有Spring用的上手。在之前一直使用Spring作为主要的技术栈,但都是一些同步的框架,如 WebMvc,Mybatis以及各种组件等。Spring提供的异步框架一直没有用过,所本专题讲开始写一些Spring提供的响应式框架。
Spring 对响应式的说明
响应式系统具有某些特性使它们成为低延迟、高吞吐量工作负载的理想选择。Project Reactor和Spring组合一起工作,使开发人员能够构建响应性、弹性、弹性和消息驱动的企业级响应性系统。
- Project Reactor: 是第四代反应库,基于反应流规范,用于在JVM上构建非阻塞应用程序。 Spring 响应式的核心基础库,提供了Mono 和 Flux API。
这里和Quarkus 做下对比: Quarkus 基于Vert.x , Muti 和 Uni 是在Vert.x基础上做的实现。
Spring 响应式技术栈 和 传统技术栈对比
Spring Web 还是遵循Servlet规范,只是3.1+, 而对于其他组件的使用上来讲都是基于原来的框架做了响应式的适配,所以使用应该还是跟原来手感差不多的。但是相应式的写法这个还是必须要适应的。
整体上来说Spring的响应式框架是可以用的,只不过对于更多组件的响应式支持还需要继续努力了。
2. Hello World
这里仅以WebFlux 为例 体验一下Spring的Reactive
2.1 引入Pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
这里注意不要在引入Spring boot 的Web 依赖了,这两个在一块是有冲突的。
2.2 Controller
package com.spring.reactive.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.HashMap;
@RequestMapping("user")
@RestController
public class UserController {
@GetMapping
public Mono<HashMap<String, Object>> getUserInfo(){
return Mono.fromCallable(()->{
HashMap<String, Object> result = new HashMap<>();
result.put("code", 200);
result.put("msg", "success");
HashMap<String, Object> user = new HashMap<>();
user.put("name", "jack");
user.put("age", 20);
user.put("address", "北京市朝阳区望京SOHO");
result.put("data", user);
return result;
});
}
@GetMapping("mono_1")
public Mono<String> test_1(){
return Mono.just("hello");
}
@GetMapping("flux_1")
public Flux<String> test_f_1(){
return Flux.just("1","2","3");
}
}
从代码和结果上看,其实和我们使用传统的Spring开发并没有太大的区别,唯一的区别就是使用了Mono 和 Flux 两个API ,所以跟我在Quarkus的文章中观点一样,如果想要使用好响应式框架,就要深入了解框架提供的API。
3. 总结
- 本文简单了解了Spring的提供的响应式框架,并简单体验了WebFlux
- Spring reactive的核心基础是 Project Reactor
- Project Reactor 提供了两个核心API: Mono 和 Flux 需要重点掌握
- 简单对比Spring Reactive 和Quarkus ,两者实现基础不一样,Quarkus生态更完善,实际性能测试 Quarkus要略胜一筹。