Reactor

支持Blazor的保护!.NET Core代码保护工具.NET Reactor v6.3.0.0版全新出发!

亡梦爱人 提交于 2020-08-09 11:25:56
.NET Reactor 是一个功能强大的代码保护和软件许可系统,适用于为.NET Framework编写的软件,并支持生成.NET程序集的所有语言。 .NET Reactor迎来了久违的版本更新,进入v6.3.0.0全新时代!支持Blazor保护,支持.NET 5 Preview 4保护,允许创建.NET Core 3.x单个文件应用程序,改进了许多功能性能,等等10个功能的更新和改进,更多更新详情如下( 立即下载 ): 新增与改进功能 添加了Blazor保护支持 添加了.NET 5 Preview 4保护支持 添加了“ 捆绑 ”选项以创建.NET Core 3.x单个文件应用程序 改进的资源压缩支持。现在可以选择不同的压缩方法。 改进的“控制流混淆” 增加了对net标准2.1的“隐藏方法调用”支持 添加了“混淆”->“命名约定”选项,可以在各种命名样式之间进行选择 为.NET Core 2.x程序集添加了“ NecroBit”和“隐藏方法调用”支持。v6.2.0.0中已经添加了对.NET Core 3.x的相应支持。 改进的合并。如果合并具有本地化资源dll的程序集,则本地化资源dll也将自动合并。 改进的GUI。通过特殊的齿轮按钮可快速访问“快速设置”子选项。 保护速度提高 Bug修复 修复了“代码虚拟化”问题 修复了“控制流混淆”问题 修复了.NET Core的

java http请求建议使用webClient,少用RestTemplate,不用HttpClient

牧云@^-^@ 提交于 2020-08-09 10:50:22
简介: webClient:是Spring-webFlux包下的,非阻塞响应,最低java8支持函数式编程,性能好 RestTemplate:是Spring-webmvc包下的,满足RestFul原则,代码简单,默认依赖jdk的HTTP连接工具。 HttpClient:是apache httpClient包下的,代码复杂,需要资源回收。 一、webClient get代码如下:(非常简单) //create()创建一个WebClient的实例 //get()等选择调用方式为get //uri()指定需要请求的路径 //retrieve()用来发起请求并获得响应 //bodyToMono(String.class)用来指定请求结果需要处理为String,并包装为Reactor的Mono对象。 Mono<String> response = WebClient.create().get().uri("http:localhost:8080/rest/testGetHeader").retrieve().bodyToMono(String.class); return response.block(); 二、RestTemplate get代码如下:(简单) 1、先在启动类注册: @Bean public RestTemplate restTemplate(){ return new

Spring Boot 2.3 新特性优雅停机详解

北城以北 提交于 2020-08-09 02:23:08
什么是优雅停机 先来一段简单的代码,如下: @RestController public class DemoController { @GetMapping("/demo") public String demo() throws InterruptedException { // 模拟业务耗时处理流程 Thread.sleep(20 * 1000L); return "hello"; } } 当我们流量请求到此接口执行业务逻辑的时候,若服务端此时执行关机 (kill),spring boot 默认情况会直接关闭容器(tomcat 等),导致此业务逻辑执行失败。在一些业务场景下:会出现数据不一致的情况,事务逻辑不会回滚。 graceful shutdown 在最新的 spring boot 2.3 版本,内置此功能,不需要再自行扩展容器线程池来处理, 目前 spring boot 嵌入式支持的 web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于 Servlet 的 web 应用程序都支持优雅停机功能。 我们来看下如何使用: 当使用 server.shutdown=graceful 启用时,在 web 容器关闭时,web 服务器将不再接收新请求,并将等待活动请求完成的缓冲期。 配置体验 此处支持的 shutdown 行为

Java高并发教程:Reactor反应器模式

☆樱花仙子☆ 提交于 2020-08-08 19:21:36
Java高并发教程:Reactor反应器模式 Reactor反应器模式   到目前为止, 高性能网络编程都绕不开反应器模式 。很多著名的服务器软件或者中间件都是基于反应器模式实现的,如Nginx、Redis、Netty。   反应器模式是 高性能网络编程的必知、必会的模式 。 Reactor简介   反应器模式 由Reactor反应器线程 、 Handlers处理器 两大角色组成:   (1)Reactor反应器线程的职责: 负责响应IO事件,并且分发到Handlers处理器 。   (2)Handlers处理器的职责: 非阻塞 的执行业务处理逻辑。   从上面的反应器模式定义,看不出这种模式有什么神奇的地方。当然,从简单到复杂,反应器模式也有很多版本。根据前面的定义,仅仅是最为简单的一个版本。 多线程OIO的致命缺陷   在Java的OIO编程中,最初和最原始的网络服务器程序,是用一个while循环,不断地监听端口是否有新的连接。如果有,就调用一个和处理函数来完成,示例代码如下: @Test public void client() throws IOException { Socket client = new Socket("127.0.0.1", 9999); Writer writer = new OutputStreamWriter(client

Reactor 3 (8): 通过create()、generate()生成publisher

陌路散爱 提交于 2020-08-08 16:01:12
之前文章也介绍过了Mono和Flux的静态创建方法,这里有两种方法能够更加随意的生成Mono或是Flux: create(): 该方法可以用来创建flux和mono,通过出入一个callback函数用来对sink进行操作,添加sink的元素,create可以获取回调中发生的多线程事件,比如桥接一些异步多值得api generate(): 该方法只能用来生成Flux,相对create而言,generate在创建过程可以持久化一个state变量记录一些状态,类似闭包结构,通过一个回调函数进行对sink的操作,还可以对最后的state进行处理。当然generate可以像create一样使用 generate()方法使用 使用generate()创建Flux代码 @Test public void generateFlux ( ) { Flux < Object > flux = Flux . generate ( ( ) - > 0 , ( i , sink ) - > { sink . next ( i * i ) ; if ( i == 5 ) sink . complete ( ) ; return ++ i ; } , state - > log . warn ( "the final state is:{}" , state ) ) . log ( ) ; flux .

redis 分布式缓存

我怕爱的太早我们不能终老 提交于 2020-08-08 05:11:22
分布式缓存的主要有点: 高性能与高并发 高性能:内存读取速度远高于数据库 高并发:数据库瞬间不能支持高并发,通过缓存,可以支持每秒十万级的请求。普通数据库每秒响应千级的。 使用缓存存在的常规问题: 1.缓存与数据库双写不一致 先删缓存,然后写db,在删除缓存。 2.缓存雪崩 缓存集群挂了,或者大量缓存同一时间过期的导致大量请求打到db。保证缓存集群的高可用, 哨兵或者cluster方案。热点key不要过去,定时去更新。热点key分部在cluster的不同节点上。 3.缓存击穿 一个缓存key失效的瞬间,大量请求进入db。 做限流,分布式锁,只允许一个请求去查询db。 4.缓存穿透 大量cache中不存在这个key,请求进入db。 可以在db中查询没有的key,在cache中设置一个快速过期的空值。或者使用布隆过滤器,把所有可能存的数据存在一个足够大的bitmap中,一定不存在的数据就会被拦截在,从而避免对底层数据库的查询。 redis的线程模型: redis基于reactor模式开发了网络事件处理模型,这个事件叫做文件事件处理模型(file event handler)。这个文件处理器是单线程的,采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应事件处理器来处理这个事件。 文件事件处理器是单线程运行的,但是通过IO多路复用机制来监听多个socket

Reactor 3 (6): 背压 Backpressure 使用

拜拜、爱过 提交于 2020-08-07 09:50:27
有这样的情况,上游传递到下游的数据需要进行处理,然而上游推送的速度又很快,下游由于资源等原因来不及处理;如果这时还是通过不限制上游速度的方式推送数据,就会出问题,因此Reactive Streams有两一种处理方式,就是通过request的机制向上游传递信号,并指定接收数量;通过这种方法将 push 模型转化为 push-pull hybrid ,这就是backpressure的用法。 通过编写Subscriber实现backpressure 下面介绍backpressure比较原始的写法,通过构建Subscriber控制request的大小: @Test public void rawBackPressure ( ) { Flux < String > flux = Flux . range ( 1 , 10 ) . map ( i - > String . valueOf ( i ) ) . log ( ) ; flux . subscribe ( new Subscriber < String > ( ) { private int count = 0 ; private Subscription subscription ; private int requestCount = 2 ; @Override public void onSubscribe (

新特性:这招牛逼,Spring Boot 2.3.0 如何优雅停机?

半腔热情 提交于 2020-08-07 07:06:46
原文: https://mp.weixin.qq.com/s/uvNkdcmwkd6lcSRDhjPUJQ 1.什么是优雅停机 先来一段简单的代码, 如下: @RestController public class DemoController { @GetMapping("/demo") public String demo() throws InterruptedException { // 模拟业务耗时处理流程 Thread.sleep(20 * 1000L); return "hello"; } } 当我们流量请求到此接口执行业务逻辑的时候, 若服务端此时执行关机 (kill), spring boot 默认情况会直接关闭容器(tomcat 等), 导致此业务逻辑执行失败。在一些业务场景下:会出现数据不一致的情况, 事务逻辑不会回滚。 2.graceful shutdown 在最新的 spring boot 2.3 版本, 内置此功能, 不需要再自行扩展容器线程池来处理, 目前 spring boot 嵌入式支持的 web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于 Servlet 的 web 应用程序都支持优雅停机功能。我们来看下如何使用: 当使用 server.shutdown=graceful 启用时, 在

netty极简教程(六):Netty是如何屏蔽ServerSocketChannel启动的

久未见 提交于 2020-08-07 04:33:59
现在我们已经基本了解了netty底层使用的组件,就明白了netty为什么是事件驱动模型:(netty极简教程(四): netty极简教程(五):Netty的Reactor模型演进及JDK nio聊天室实现 , 接下来追踪下netty的启动源码,验证reactor模型在netty的实现 示例源码: https://github.com/jsbintask22/netty-learning 示例 我们以第一节打印客户端信息的代码为例: NioEventLoopGroup bossLoopGroup = new NioEventLoopGroup ( 1 ) ; // 1 NioEventLoopGroup workLoopGroup = new NioEventLoopGroup ( ) ; // 2 try { ServerBootstrap serverBootstrap = new ServerBootstrap ( ) ; serverBootstrap . group ( bossLoopGroup , workLoopGroup ) . channel ( NioServerSocketChannel . class ) // 3 . childHandler ( new ChannelInitializer < SocketChannel > ( ) {