SpringBoot2.0响应式编程

SprinBoot2.x响应式编程简介

简介:讲解什么是reactive响应式编程和使用的好处

1、基础理解:
	依赖于事件,事件驱动(Event-driven)
	一系列事件称为“流”
	异步
	非阻塞

	观察者模式

  网上的一个例子:
	int b= 2;
	int c=3
	int a = b+c  //命令式编程后续b和c变化,都不影响a
	b=5;

	int b= 2;
	int c= 3
	int a = b+c  //响应式编程中,a的变化,会和b、c的变化而变化(事件驱动)
	b=5;

2、官网:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-webflux
	SpingBoot2底层是用spring5,开始支持响应式编程,Spring又是基于Reactor试下响应式。

学习资料
	1、reactive-streams学习资料:http://www.reactive-streams.org/
	2、web-flux相关资料:https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#spring-webflux

SpringBoot2.x响应式编程webflux介绍

简介:讲解SpringBoot2.x响应式编程介绍 Mono、Flux对象和优缺点

1、Spring WebFlux是Spring Framework 5.0中引入的新的反应式Web框架
与Spring MVC不同,它不需要Servlet API,完全异步和非阻塞,并 通过Reactor项目实现Reactive Streams规范。
RxJava

2、Flux和Mono  User List<User>
	1)简单业务而言:和其他普通对象差别不大,复杂请求业务,就可以提升性能
	2)通俗理解:
		Mono 表示的是包含 0 或者 1 个元素的异步序列
			mono->单一对象 User     redis->用户ID-》唯一的用户Mono<User>  
		
		Flux 表示的是包含 0 到 N 个元素的异步序列
			flux->数组列表对象 List<User>   redis->男性用户->Flux<User>
		Flux 和 Mono 之间可以进行转换

3、Spring WebFlux有两种风格:基于功能和基于注解的。基于注解非常接近Spring MVC模型,如以下示例所示:
	第一种:
		@RestController 
		@RequestMapping(“/ users”)
		 public  class MyRestController {

			@GetMapping(“/ {user}”)
			 public Mono <User> getUser( @PathVariable Long user){
				 // ...
			}

			@GetMapping(“/ {user} / customers”)
			 public Flux <Customer> getUserCustomers( @PathVariable Long user){
				 // ...
			}

			@DeleteMapping(“/ {user}”)
			 public Mono <User> deleteUser( @PathVariable Long user){
				 // ...
			}

		}
	第二种: 路由配置与请求的实际处理分开
		@Configuration
		 public  class RoutingConfiguration {

			@Bean
			 public RouterFunction <ServerResponse> monoRouterFunction(UserHandler userHandler){
				 return route(GET( “/ {user}”).and(accept(APPLICATION_JSON)),userHandler :: getUser)
						.andRoute(GET(“/ {user} / customers”).and(accept(APPLICATION_JSON)),userHandler :: getUserCustomers)
						.andRoute(DELETE(“/ {user}”).and(accept(APPLICATION_JSON)),userHandler :: deleteUser);
			}

		}

		@Component
		public class UserHandler {

			公共 Mono <ServerResponse> getUser(ServerRequest请求){
				 // ...
			}

			public Mono <ServerResponse> getUserCustomers(ServerRequest request){
				 // ...
			}

			公共 Mono <ServerResponse> deleteUser(ServerRequest请求){
				 // ...
			}
		}



4、Spring WebFlux应用程序不严格依赖于Servlet API,因此它们不能作为war文件部署,也不能使用src/main/webapp目录

5、可以整合多个模板引擎
	除了REST Web服务外,您还可以使用Spring WebFlux提供动态HTML内容。Spring WebFlux支持各种模板技术,包括Thymeleaf,FreeMarker

SpringBoot2.x webflux实战

简介:webflux响应式编程实战

1、WebFlux中,请求和响应不再是WebMVC中的ServletRequest和ServletResponse,而是ServerRequest和ServerResponse

2、加入依赖,如果同时存在spring-boot-starter-web,则会优先用spring-boot-starter-web
	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-webflux</artifactId>
	</dependency>

	测试
	localhost:8080/api/v1/user/test

3、启动方式默认是Netty,8080端口

4、参考:https://spring.io/blog/2016/04/19/understanding-reactive-types
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值