webflux:

反应式编程reactor的产物,采用发布订阅模式,引入netty的nio,比较适合IO密集型应用。

因普遍应用使用的DB链接是IO阻塞型,因此在一般应用中无法体现它的优势。redis和mongoDB支持reactor。

前言: Flux && Mono

Flux: 可返回1到n个结果,

Mono: 仅返回0到1个结果

MAVEN 依赖:

            <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.1.9.RELEASE</version>
</dependency>

注意: spring-boot-starter-webflux 和 spring-boot-starter-webmvc 会冲突,因此如果有webmvc请排除掉。

启动引入

@SpringBootApplication
@EnableWebFlux
public class TestWebfluxApp {
SpringApplication.run(TestWebfluxApp.class, args);
}

controller方式使用

@Slf4j
@RequestMapping("/webflux")
@RestController
public class TestWebFluxController { /**
* Mono
* @param user
* @return
*/
@RequestMapping("/user/new")
public Mono<String> user(@RequestBody User user){
System.out.println("user:" +user);
WebClient webClient = WebClient.create("http://127.0.0.1:8089");
Mono<ClientResponse> exchange = webClient.get().uri("/algo/yumc/get?test=junitTest1234&sk={0}", "123456").exchange();
System.out.println("user2: ---------------------");
Mono<String> mono = Mono.just("1234567");
return exchange.block(Duration.ofSeconds(1)).bodyToMono(String.class);
} /**
* Flux
* @return
*/
@RequestMapping("/user/list")
public Flux<String> user(){
WebClient webClient = WebClient.create("http://127.0.0.1:8089");
Mono<ClientResponse> exchange = webClient.get().uri("/algo/yumc/get?test=junitTest1234&sk={0}", "123456").exchange();
System.out.println("user2: ---------------------");
Flux<String> stringFlux = Flux.just("1234","5678");
return exchange.block(Duration.ofSeconds(1)).bodyToFlux(String.class);
}

endpoint方式使用

@Configuration
public class WebfluxConfiguration { @Autowired
private UserHandler userHandler; @Bean
@Qualifier("userRouter")
public RouterFunction<ServerResponse> userRouter(){
return RouterFunctions.nest(RequestPredicates.path("/flux/user"),
RouterFunctions.route(RequestPredicates.GET("/info"), UserHandler::getUserInfo)
.andRoute(RequestPredicates.GET("/list"), UserHandler::getUserList));
} @Component
public class UserHandler { /**
* request
* @param serverRequest
* @return
*/
public static Mono<ServerResponse> getUserInfo(ServerRequest serverRequest) {
User user = new User();
user.setId(12345);
user.setName("张三");
return ServerResponse.ok()
.contentType(MediaType.TEXT_PLAIN)
.body(BodyInserters.fromObject(user));
}

常见异常:

  • org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'text/xml;charset=UTF-8' not supported for bodyType

    原因:MediaType.TEXT_PLAIN 转变为 MediaType.APPLICATION_JSON 即可

spring-boot-starter-webflux的更多相关文章

  1. Spring Boot WebFlux-01——WebFlux 快速入门实践

    第01课:WebFlux 快速入门实践 Spring Boot 2.0 spring.io 官网有句醒目的话是: BUILD ANYTHING WITH SPRING BOOT Spring Boot ...

  2. Spring Boot Starter 介绍

    http://www.baeldung.com/spring-boot-starters 作者:baeldung 译者:http://oopsguy.com 1.概述 依赖管理是任何复杂项目的关键部分 ...

  3. spring -boot s-tarter 详解

    Starter POMs是可以包含到应用中的一个方便的依赖关系描述符集合.你可以获取所有Spring及相关技术的一站式服务,而不需要翻阅示例代码,拷贝粘贴大量的依赖描述符.例如,如果你想使用Sprin ...

  4. Spring Boot (一): Spring Boot starter自定义

    前些日子在公司接触了spring boot和spring cloud,有感于其大大简化了spring的配置过程,十分方便使用者快速构建项目,而且拥有丰富的starter供开发者使用.但是由于其自动化配 ...

  5. SpringBoot 之Spring Boot Starter依赖包及作用

    Spring Boot 之Spring Boot Starter依赖包及作用 spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. spri ...

  6. Spring boot starter pom的依赖关系说明

    Spring Boot 通过starter依赖为项目的依赖管理提供帮助.starter依赖起始就是特殊的maven依赖,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖. sp ...

  7. Spring Boot Starter列表

    转自:http://blog.sina.com.cn/s/blog_798f713f0102wiy5.html Spring Boot Starter 基本的一共有43种,具体如下: 1)spring ...

  8. 创建自己的Spring Boot Starter

    抽取通用模块作为项目的一个spring boot starter.可参照mybatis的写法. IDEA创建Empty Project并添加如下2个module,一个基本maven模块,另一个引入sp ...

  9. 自己写spring boot starter

    自己写spring boot starter 学习了:<spring boot实战>汪云飞著 6.5.4节 pom.xml <project xmlns="http://m ...

  10. 自定义的Spring Boot starter如何设置自动配置注解

    本文首发于个人网站: 在Spring Boot实战之定制自己的starter一文最后提到,触发Spring Boot的配置过程有两种方法: spring.factories:由Spring Boot触 ...

随机推荐

  1. Nginx+UWSGI+supervisor

    Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检 ...

  2. Software--BigData--StreamingData

    2018-03-29 16:13:34 一 : 流系统分层架构设计 二: 分层技术选型分析 三:底层 -- 服务配置和协调 ZooKeeper

  3. vue.js----之框架搭建(一)

    首先你要有node,没有的去官网安装一下就好了 好了开始搭建骨架 第一步安装vue-cli npm install -g vue-cli 创建vue项目 语法:这里我选择使用webpack来创建 vu ...

  4. Linux基础第六章:逻辑卷的使用、扩容和磁盘配额

    一.逻辑卷的使用及扩容 1.概念优点及注意事项 2.使用命令及基本格式 3.创建逻辑卷 ①创建物理卷 ②创建卷组 ③创建逻辑卷 ④格式化.挂载yk26逻辑卷在/mnt下并在逻辑卷yk26下创建文件a. ...

  5. JavaScript判断是否包含中文字符

    一. <script language="javascript"> function funcChina(){ var obj = document.form1.txt ...

  6. 解决通配符的匹配很全面, 但无法找到元素 'aop:config' 的声明

    这是因为在applicationContext.xml文件中没有添加对应的地址 http://www.springframework.org/schema/aop http://www.springf ...

  7. 华为光猫HG8346V5配置

  8. SpringBoot项目启动

    SpringBoot项目与其他项目启动方式有些不同. 查看是否是SpringBoot项目,可以查看在项目的pom.xml中是否有引入SpringBoot: 上图中就是对应的spring-boot.若有 ...

  9. ZSTUOJ平台刷题⑤:Problem G.--深入浅出学算法023-旋转数阵

    Problem G: 深入浅出学算法023-旋转数阵 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 4794  Solved: 955 Descripti ...

  10. Dapper修改

    <table class="table table-bordered"> <tr> <td>商品名称:</td> <td> ...