netty源码浅析(下篇) 今天来聊聊NioEventLoopNioEventLoop主要的组成有三部分1、selector2、Queue和threadSingleThreadEventExecutor(普通任务队列和线程):AbstractScheduledEventExecutor(定时任务队列):来看看它们的创建:selector的创建是在NioEventLoop的构造函数中NioEventLoop(NioEventLoopGroup parent, Executor executor, SelectorP
Netty源码浅析(上篇) 下面是netty的简化启动流程// 1、netty的NioEventLoopGroup 实现了下面这一操作(封装线程+selector+任务队列)Selector selector = Selector.open(); // 创建 NioServerSocketChannel,同时会初始化它关联的 handler,以及为原生 ssc 存储 configNioServerSocketChannel attachment = new NioServerSocketChannel();// 创建 N
netty学习之主要的组件 初识netty话不多说,直接从基础代码入手//服务端代码public class HelloServer { public static void main(String[] args) { // 1、启动netty服务器 new ServerBootstrap() // 2、创建 NioEventLoopGroup, Selector+线程+队列 .group(new NioEventLoopGr
Gateway篇(一)之Gateway配置 网关出现的背景微服务中,服务的粒度被细分,以往的一整大块服务可以被拆分成类似订单服务,支付服务等。拆分后的服务一般都是通过网络来进行通讯的,如果让客户端一个个来调用服务,未免过于复杂。这个时候大家可能会想到nginx来进行反向代理,不过nginx的配置稍有麻烦。于是乎Gateway就出现了,Gateway比nginx更加契合Spring Cloud系统。网关的作用网关是处于应用程序或服务之前的系统,用来管理授权、访问控制和流量限制等。通俗来讲就是对其他服务请求的集中管理,请求先到网关,再由网关请求到真
nginx篇(一)之nginx做限流 限流算法一般有两种:令牌桶算法:思路:1、按照一定速率向令牌桶投送令牌。令牌桶满,则丢弃令牌 2、当请求过来时候,会经过一个过滤器,过滤器过滤的请求会经过令牌桶处理。3、请求只有拿到令牌才能被执行,拿不到令牌的请求被缓存 4、通过这种方式就能够控制请求的流量,令牌添加的速度就是请求流量的速度。漏桶算法:思路:请求先进入漏桶,漏桶以一定速率漏水,漏出的水会先处理,当水流远远大于漏桶漏水的速率,这个时候,水就会直接溢出。这里可以把请求当作水,这就是漏桶算法的大致思路。nginx中主要通过漏桶算法来做限
JWT和Spring Security的登录功能落地实现 服务端维护用户登录状态,一般有基于session和token两种方式一、传统的web项目用session+cookies机制来维护用户登录状态,当然有一定的不足:session是保持在服务端内存中的,也就是意味着用户下次请求必须还得在这台服务器上,才能拿到授权的资源,对于分布式系统来说是一个难以处理的点。随着认证用户的增加,服务端的开销也会增大。二、基于token的鉴权机制客户端拿账号密码请求服务端服务端校验账号密码,如果校验Ok的话,给客户端颁发token客户端拿到服务端颁发的toke
关于Spring Security的认证流程心得 最近用spring security框架来做认证授权工作,搞得头有点大了,借此机会,小结学习一番 spring security是一个安全访问控制框架,其工作是基于一系列的过滤器来实现的,这些过滤器是框架的核心,但是他们不直接处理用户的认证和授权,而是通过AuthenticationManager(认证管理器)和Acc
ZooKeeper概念与知识点详解 概念:ZooKeeper是一个为分布式应用提供协调服务的开源项目工作机制:从设计模式来讲,ZooKeeper是一个基于观察者模式,为分布式服务提供支持的框架。其本身用于存储和管理数据,可以接受观察者的注册,数据发生变化时候,ZooKeeper就会主动去通知这些观察者。特点:ZooKeeper的服务端是由一个领导者(leader)和多个跟随者(follower)所组成的集群,集群之间通过Zab(Zookeeper Atomic Broadcast)来保持数据的一致性ZooKeeper中有半数以
Spring boot中嵌入式Servlet容器的配置和启动原理 以下分析基于Springboot2.0以上版本,1.X版本跟2.0以上版本源码差异性较大嵌入式Servlet容器的自动配置原理流程如下:SpringBoot 根据的依赖信息(默认是tomcat),创建对应的WebServerFactoryCustomizer(定制器,用来定制一些属性,默认为tomcat 所以就是定制tomcat的一些属性);WebServerFactoryCustomizerBeanPostProcessor(web工厂定制器的后置处理器)获取所有类型为web服务工厂定制器的组件(
Springboot的错误处理机制 相信以下这个页面对大家来说并不陌生,当我们启动一个springboot应用的时候,如果在浏览器访问错误,springboot就会自动响应这个界面,如果不是在浏览器访问,比如在postman去访问,springboot响应回来的则是json数据,今天就来探究下springboot对错误的处理机制。浏览器响应:Postman响应:首先Springboot在启动的时候,会帮我们加载很多配置类,这其中也包括错误自动配置类,处理的大概流程如下:一但系统出现
spring boot的自动配置原理解析 Spring boot的自动配置 Springboo应用启动的时候,首先会先走主配置类,如下代码所示:@SpringBootApplication//这是Springboot的核心注解,也是一个混合注解。public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args
spring事务细节和事务传播解析 Spring事务的配置上述就是spring事务的一个简单配置,只要给方法上加上Transactional,就可以控制住这个方法,在方法出现异常的时候进行回滚操作,同时还可以设置一些参数,关于这些参数也在上图中标记出来了。下面主要是事务隔离级别和事务传播行为的介绍1、事务隔离级别:数据库事务并发的三大问题:脏读:事务1将变量a从1改成10 >>> 事务2读取到a的值为10 >>> 事务1出现异常,把a回滚成1 >>>事务2拿到的值a=10
单例设计模式的八种方式 //饿汉式(静态常量)class Singleton{ private Singleton{} private final static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; }}//优点:类加载的时候就完成实例化,避免了线程同步的问题//不足:没有懒加载,如果实例没有用到,会造成内存浪费//饿汉式(静
设计模式的七大原则 设计模式最主要的目的就是解耦,低耦合,高内聚,扩展性,重用性,灵活性,这些都是设计模式努力的方向。重用性:相同功能的代码,可以复用可读性:代码结构清晰简洁,编程规范,便于其他程序员阅读与理解可扩展性:当需要增加新的功能的时候,非常方便可靠性:增加新功能后,对原来功能没有影响当然不是随随便便的模式都可以成为设计模式,设计模式也要遵守一定的设计原则。单一职责模式顾名思义,一个类应该只负责一项职责作用:降低类复杂度,一个类只负责一项职责,提高类的可读性和维护性接口隔离原则客户端不应该依赖于
ReentrantLock加锁与解锁源码解析 我们使用ReentrantLock的时候一般是如下用法public class MainActivity { public static void main(String[] args) { ReentrantLock lock = new ReentrantLock(); lock.lock(); try{ //逻辑代码 }finally { lock.unlock();
java中的垃圾收集器和内存分配策略 引用计数法概述:在对象中添加一个引用计数器,每当有一个地方引用它时候,计数器值就加1,当引用失效时候,计数器值就减一,任何计数器为0的对象就是不可能被使用了。引用计数器的缺点:当两个对象相互引用的时候,引用计数器就无法回收他们。可达性分析算法思路:通过一系列称为“GC Roots”的根节点作起始点集,从这些节点开始,根据引用向下搜索,搜索的过程称为引用链,如果某个对象到GC Roots间没有任何引用链相连,或者用图论来说就是GC Roots到这个对象不可达时候,则证明这个对象是不可再使.