Reactor

11、Spring WebFlux解析

為{幸葍}努か 提交于 2020-02-27 06:49:03
1.1、webflux介绍 同步阻塞式IO模型,异步非阻塞式IO模型 webflux应用场景:适合IO密集型、磁盘IO密集、网络IO密集等服务场景 // 待补充 1.2、Reactor指南 1.3、webflux实践 1.4、webflux解析 来源: oschina 链接: https://my.oschina.net/liwanghong/blog/3168961

2020金三银四的面试者们需要知道Java那些事

社会主义新天地 提交于 2020-02-27 06:42:57
一、基础篇 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与 String str=new String("i")一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些区别? 13.抽象类能使用 final 修饰吗? 14.接口和抽象类有什么区别? 15.java 中 IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、 进阶篇 Java底层知识 字节码、class文件格式 CPU缓存,L1,L2,L3和伪共享 尾递归 位运算 用位运算实现加、减、乘、除、取余 设计模式 了解23种设计模式 会使用常用设计模式 单例、策略、工厂、适配器、责任链。 实现AOP 实现IOC 不用synchronized和lock,实现线程安全的单例模式 nio和reactor设计模式 网络编程 tcp

Netty高性能原理和框架架构解析

眉间皱痕 提交于 2020-02-26 13:14:50
1、引言 Netty 是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。 本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件、整体架构,知其然且知其所以然,希望给大家在实际开发实践、学习开源项目方面提供参考。 2、JDK 原生 NIO 程序的问题 JDK 原生也有一套网络应用程序 API,但是存在一系列问题,主要如下: 1)NIO 的类库和 API 繁杂,使用麻烦:你需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。 2)需要具备其他的额外技能做铺垫:例如熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网路编程非常熟悉,才能编写出高质量的 NIO 程序。 3)可靠性能力补齐,开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等等。NIO 编程的特点是功能开发相对容易,但是可靠性能力补齐工作量和难度都非常大。 4)JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,它会导致 Selector 空轮询,最终导致 CPU 100%。官方声称在 JDK 1.6 版本的 update 18 修复了该问题,但是直到 JDK 1.7

3天两版 Spring Boot 2.2.4 发布!紧急修复Spring Cloud Hoxton.SR1 兼容问题

你说的曾经没有我的故事 提交于 2020-02-26 12:09:34
Spring Boot 2.2.4 发布了,可以从 repo.spring.io 和 Maven Central 获取。 此版本修复了 6 个 bug,进行了一些文档改进和依赖性升级,解决了 Gradle 5.3 至 5.6 的依赖性解析问题。 🐞 Bug修复 @ActiveProfiles 与 @SpringBootTest 使用,覆盖 spring.profiles.active 问题 从Gradle 5.3.x到5.6.x的依赖关系解析失败 📔 文献资料 文档RedisCacheManagerBuilderCustomizer #19819 🔨 依赖升级 升级到Reactor Dysprosium-SR4 #19795 ,升级 reactor-netty 0.9.4 使用 Spring Boot 2.2.4 即可解决 《翻车!Spring Boot 2.2.3 不兼容 Spring Cloud Hoxton.SR1 》 问题, 核心是 reactor-netty 向下兼容 > 项目推荐: Spring Cloud 、Spring Security OAuth2的RBAC权限管理系统 欢迎关注 来源: oschina 链接: https://my.oschina.net/giegie/blog/3160666

Spring WebFlux -04-操作符-05-更多

拥有回忆 提交于 2020-02-26 07:25:24
(1)除了以上几个常见的操作符意外,Reactor中提供了非常丰富的操作符。 (2)用于编程方式自定义生成数据流的create和generate等及其变体方法。 (3)用于“无副作用的peek(我的理解就是不会消费数据)”场景的doOnNext、doOnError、doOnComplete、doOnSubscribe、doOnCancel等及其变体方法。 (4)用于数据流转换的when、and/or、merge、concat、collect、count、repeat等及其变体方法。 (5)用于过滤/拣选的take、first、last、sample、skip、limitRequest等及其变体方法。 (6)用于错误处理的timeout、onErrorReturn、onErrorResume、doFinally、retryWhen等及其变体方法。 (7)用于分批的window、buffer、group等及其变体方法。 (8)用于线程调度的publishOn和subscribeOn方法。 更多操作请见官方文档: https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html 来源: oschina 链接: https://my.oschina.net/u/3777515/blog

Reactor异步线程的变量传递

假装没事ソ 提交于 2020-02-26 07:03:47
序 本文主要研究下reactor异步线程的变量传递 threadlocal的问题 在传统的请求/应答同步模式中,使用threadlocal来传递上下文变量是非常方便的,可以省得在每个方法参数添加公用的变量,比如当前登录用户。但是业务方法可能使用了async或者在其他线程池中异步执行,这个时候threadlocal的作用就失效了。 这个时候的解决办法就是采取propagation模式,即在同步线程与异步线程衔接处传播这个变量。 TaskDecorator 比如spring就提供了TaskDecorator,通过实现这个接口,可以自己控制传播那些变量。例如: class MdcTaskDecorator implements TaskDecorator { @Override public Runnable decorate ( Runnable runnable ) { // Right now: Web thread context ! // (Grab the current thread MDC data) Map < String , String > contextMap = MDC . getCopyOfContextMap ( ) ; return ( ) - > { try { // Right now: @Async thread context ! //

Spring WebFlux -01-Reactor 简介

巧了我就是萌 提交于 2020-02-26 04:37:29
Reactor是第四代Reactive库,基于Reactive Streams规范在JVM上构建非阻塞应用程序。Reactor侧重于服务器端响应式编程,是一个基于Java 8实现的响应式流规范(Reactive Streams specification)响应式库。 作为Reactive Engine/SPI,Reactor Core和IO模块都为重点使用场景提供了响应流构造,最终与Spring、RxJava、Akka Streams和Ratpack等框架结合使用,作为Reactive API,Reactor框架模块提供了丰富的消费功能,如组合和发布订阅事件。 本节对Reactor的介绍以基本的概念和简单使用为主,更多Reactor高级特性可参考Reactor官网: http://projectreactor.io/ 。 来源: oschina 链接: https://my.oschina.net/u/3777515/blog/3163492

WebFlux系列(十三)MySql应用新增、修改、查询、删除

匆匆过客 提交于 2020-02-26 02:50:30
#Java#Spring#SpringBoot#MySql#reactor#webflux#数据库#新增#修改#查询#删除# Spring WebFlux Mysql 数据库新增、删除、查询、修改 视频讲解 : https://www.bilibili.com/video/av84439890/ Employee.java package com.example.springwebfluxmysql; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Table; @Table("employee") @Data @AllArgsConstructor @NoArgsConstructor public class Employee { @Id private Long id; private String name; } EmployeeController.java package com.example.springwebfluxmysql;

线程切换之publishOn 与 subscribeOn

爱⌒轻易说出口 提交于 2020-02-26 02:24:55
一、概述 在 Spring Reactor 项目中,有两个出镜较少的方法: publishOn 和 subscribeOn 。这两个方法的作用是指定执行 Reactive Streaming 的 Scheduler(可理解为线程池)。 为何需要指定执行 Scheduler 呢?一个显而易见的原因是:组成一个反应式流的代码有快有慢,例如 NIO、BIO。如果将这些功能都放在一个线程里执行,快的就会被慢的影响,所以需要相互隔离。这是这两个方法应用的最典型的场景。 二、Scheduler 在介绍 publishOn 和 subscribeOn 方法之前,需要先介绍 Scheduler 这个概念。在 Reactor 中, Scheduler 用来定义执行调度任务的抽象。可以简单理解为线程池,但其实际作用要更多。先简单介绍 Scheduler 的实现: Schedulers.elastic() : 调度器会动态创建工作线程,线程数无上界,类似于 Execturos.newCachedThreadPool() Schedulers.parallel() : 创建固定线程数的调度器,默认线程数等于 CPU 核心数。 关于 Scheduler 的更多作用留在以后介绍。 三、publishOn 与 subscribeOn 接下来进入正题。先看两个例子(来自 https://github.com