- 博客(33)
- 收藏
- 关注
原创 Sentinel---滑动窗口限流
上一段demopublic class SentinelDemo { private static final String resouce = "doGet"; public static void initFlowRules() { List<FlowRule> flowRules = new ArrayList<>()...
2020-04-28 14:41:52
550
原创 dubbo核心之服务端接收请求过程(七)
一、服务端启动NettyServer入口1、由dubbo服务端开启端口为20880的netty服务为入口1、NettyServer接收客户端请求@Overrideprotected void doOpen() throws Throwable { bootstrap = new ServerBootstrap(); bossGroup = new NioEventLoop...
2020-04-23 21:43:50
1442
原创 dubbo核心之客户端发起请求过程(六)
一、客户端代理类请求过程1、在Controller中使用dubbo的@Reference注入的对象是在ReferenceConfig中生成的代理类 1、ReferenceConfig中构建invoker并创建代理类 private T createProxy(Map<String, String> map) { //代码省略。。。 // create...
2020-04-23 20:14:20
342
原创 dubbo核心之服务端的Invoker(四)
一、InvokerInvoker是一个代理,与dubbo中的SPI一样重要,在ServiceConfig中在调用export方法时会将一个invoker对象传递进去,分析下这个private void doExportUrlsFor1Protocol(ProtocolConfig protocolConfig, List<URL> registryURLs) { //省略。。...
2020-03-21 23:58:45
619
原创 dubbo核心之服务注册(三)
一、服务注册过程上一章分析到ServiceBean → ServiceConfig → RegistryProtocol,继续看它的export方法1、RegistryProtocol的export方法//实现服务的注册和发布@Overridepublic <T> Exporter<T> export(final Invoker<T> originIn...
2020-03-21 22:50:28
113
原创 dubbo核心之服务发布(二)
一、服务发布的过程dubbo要想发布一个服务需要做到以下几点1、解析配置文件2、通过netty去暴露一个服务3、序列化和反序列化4、将信息发布到zk上dubbo依赖spring的SPI进行服务发布,通过继承spring提供的NamespaceHandlerSupport加载application.xml的配置信息,并通过继承spring提供的BeanDefinitionParser...
2020-03-19 16:04:02
144
原创 dubbo核心---SPI(一)
一、SPIjava中的SPI(service provider interface),数据库驱动 java.sql.Driver, 通过加载在MATA-INF/services下以java.sql.Driver,命名的文件数据库驱动厂商自己实现,比如mysqldubbo很好的借鉴了这种SPI机制,dubbo会加载META-INF/services,META-INF/dubbo和M...
2020-03-03 21:20:36
141
原创 zookeeper的watcher源码(四)
一、客户端注册watcher引入zkClient的maven依赖客户端注册 watcher 有 3 种方式,getData、exists、getChildren;public class WatcherDemo { public static final String host = "122.51.167.43:2181"; public static final Stri...
2020-02-06 03:44:13
129
原创 zookeeper集群leader选举源码分析(三)
一、zookeeper的顺序一致性google的chubby就是解决分布式环境下多个服务选举出leader时,由于网络环境的不可靠性,会出现丢失、篡改问题(拜占庭将军),因此服务间用paxos算法实现分布式锁和master选举。zk就是chubby的开源实现。zk是使用zab协议完成数据同步,并不是强一致性,而是简化版的顺序一致性,如图:1.当客户端B和C在zk修改时去读取x的值,如果B...
2020-02-05 00:52:48
276
原创 zookeeper分布式锁基于curator源码(二)
在 apache封装的zk客户端操作组件curator中,有不同的锁InterProcessMutex:分布式可重入排它锁InterProcessSemaphoreMutex:分布式排它锁InterProcessReadWriteLock:分布式读写锁以InterProcessMutex为例public class LockDemo { public static f...
2020-02-04 01:24:28
111
原创 Zookeeper(一)
Zookeeper不单单是服务注册中心,它是一个分布式协调服务。最早是google开发出chubby服务于GFS系统,chubby又是基于poxos算法zookeeper通过ZAB(Zookeeper Atomic Broadcast )协议实现分布式数据一致性。ZAB分为:崩溃恢复和原子广播原子广播:1. leader 接收到消息请求后,将消息赋予一个全局唯一的64 位自增 id,叫:...
2020-02-03 15:41:33
229
原创 Netty源码分析(四)--- NioEventLoop如何读取消息
一、NioEventLoop工作过程贴一段Netty Server端和Client端的demo//1. Server端public class NettyServerTest { public static void main(String[] args) { EventLoopGroup boss = new NioEventLoopGroup(1); ...
2019-12-27 02:57:54
161
原创 Netty源码分析(三)--- 新连接进来如何初始化NioSocketChannel
一、NioSocketChannel的初始化从NioEventLoop开始说起我们在服务端启动后,boss线程组会启动一个NioEventLoop线程,它会在run方法中无限循环接收感兴趣的事件//1. NioEventLoop//新连接进来会触发ACCEPT事件@Overrideprotected void run() { for (;;) { try { ...
2019-12-26 18:15:20
243
原创 Netty源码分析(二)--- Server端启动流程
一、Netty-Server端启动流程从ServerBootstrap的bind方法开始:initAndRegister();方法//1. 绑定端口public ChannelFuture bind(SocketAddress localAddress) { validate(); if (localAddress == null) { throw new ...
2019-12-26 15:13:30
181
原创 Netty源码分析(一)--- 核心组件NioEventLoopGroup和NioEventLoop的初始化
一、NioEventLoopGroup和NioEventLoop的UML类图二、NioEventLoopGroup初始化流程从new一个NioEventLoopGroup开始//一、NioEventLoopGroup的构造器//1.传入线程数public NioEventLoopGroup(int nThreads) { //新增传入为null的执行器 this(nThrea...
2019-12-25 17:47:19
312
原创 JVM GC日志篇(五)
一、GC时机GC发生的时机是由JVM决定的,根据JVM系统环境设定,发生的时机是不确定的,我们可以手动的GC,比如调用System.gc(),但这也仅仅是通知JVM需要进行GC,具体GC时间还是由JVM决定。不建议手动GC,消耗资源比较大。发生GC的情况1、Eden区或者S区空间不够了2、Old区空间不够了3、方法区空间不够了4、System.gc()二、GC文件创建一个...
2019-12-20 10:21:55
107
原创 初识JVM(一)
一、.java文件到.class文件编译过程执行 javac Customer.java生成Customer.class文件编译的流程:Customer.java → 词法分析器 → tokens流 → 语法分析器 → 语法树/抽象语法树 → 语义分析器 → 注解抽象语法树 → 字节码生成器 → Customer.class文件Class文件cafe babe 0000 003...
2019-12-12 16:57:11
113
原创 Maven简要概述
pom文件部分内容:主要构成是基础部分:描述本包的依赖坐标:,type多为pom和jar,pom是文件,没有具体内容,jar包是有类的父类:parent:用来指定一个父类,只能是pom类型,所有在父类配置的内容,子类都会拥有,可用在这里配置所有子包都需要使用的一些内容,例如构建参数,依赖管理等属性配置:主要用来标识各个依赖包的版本号,统一管理,依赖包里的版本使用变量替代,例如<sp...
2019-12-06 10:29:08
79
原创 初识Kubernetes(一)
一、Kubernetes组件与架构图Pod:k8s中最小操作单位,一个或多个container的组合ReplicaSet:k8s中通过selector管理Pod的组件Deployment: k8s中管理ReplicaSet和Pod组件Label:k8s中以key/value形式为Pod分类Service:具有相同的Label的集合体Node:Pod运行的地方(比如cento...
2019-11-11 16:19:39
238
2
原创 Docker实战(四)
一、持久化Dockerfile中能看到VOLUME这个关键字,先创建个containerdocker run -d --name=mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.21会返回一串编号:a0ff652112059926c5e82bda0a832948e1c4ce11294afb17481a278b4627...
2019-11-08 14:02:10
140
原创 Docker网络(三)
一、计算机网络模型二、Linux中网卡查看网卡详情命令:ip link show查询网卡:ls /sys/class/net查看ip信息: ip a状态 UP/DOWN/UNKNOWlink/ether:MAC地址inet :ip地址我们可以通过修改文件或者命令的方式改ip地址文件:/etc/sysconfig/network-scripts目录...
2019-11-08 14:02:05
160
原创 Docker核心(二)
一、什么是Imageimage是由一层层的layer构成image是read-only看看官方提供tomcat的imageimage就是一个Dockerfile,分析一下Dockerfile的语法FROM: 指定基础镜像(centos、 openjdk:8 等等)eg:FROM openjdk:8-jdkENV:环境变量(可以通过docker run --e key=va...
2019-11-08 14:02:00
109
原创 Docker入门(一)
一、为什么用docker对比部署方式传统部署:成本高、部署慢、不利于扩展虚拟化部署:相对传统部署来说扩展和资源利用较好,但是虚拟机太重,占用太多资源docker部署:1、充分利用机器资源;2、有助于MicroService部署;3、推动DevOps落地淘汰敏捷开发,提高开发、测试、部署效率;4、云原生落地、利于应用迁移;二、docker的安装首先有一台Centos7系统...
2019-11-08 14:01:52
108
原创 Mybatis整合Spring实现Mapper自动注入原理
通过Spring的扩展点,实现bean的管理 + 封装Template方法一、Bean的管理在引入mybatis-spring.jar后,我们需要在applicationContext.xml中配置 SqlSessionFactoryBean具体看看这个类:1、FactoryBean:这是spring的工厂bean,我们获取bean的时候会得到它getObject方法返回的对象,只...
2019-10-06 18:38:18
2410
1
原创 Mybatis插件的使用
插件执行时序图链接: 时序图.插件能干的事sql执行日志sql执行效率插件根据条件水平分表查询(方法上加注解)权限控制数据库敏感信息加密...
2019-10-06 15:04:56
79
原创 Mybatis的动态sql、懒加载
一、 动态sqlif标签:满足某某条件<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{title} </if>...
2019-10-06 01:17:21
727
1
原创 Mybatis缓存分析
一、mybatis四个核心对象的生命周期SqlSessionFactoryBuilder:只用一次 存在于方法体中,用于解析配置文件,构建SqlSessionFactorySqlSessionFactory:全局单例 存在整个生命周期,用于创建SqlSessionSqlSession:线程不安全的,存在于每次操作数据库创建这个对象, 用于创建MapperMapper:都是代理对象,存在于...
2019-10-06 01:13:17
109
原创 Mybatis时序图
一、创建SqlSessionFactory时序图: 链接: 创建SqlSessionFactory.二、创建SqlSession时序图: 链接: 创建SqlSession.三、创建Mapper代理对象时序图: 链接: 创建Mapper代理对象.四、代理Mapper对象调用查询方法时序图: 链接: 代理Mapper对象调用查询方法....
2019-10-06 01:12:37
469
原创 提炼spring核心代码,如果仿写源码不是为了装逼,那将毫无意义
代码托管到github主要还是站在设计者角度,减轻开发人员繁琐配置,让他们专注于业务https://github.com/neo0116/my-spring-framework.git目录:
2019-10-03 17:01:09
159
原创 300行代码提炼Spring核心原理(超级乞丐版)
1、项目结构2、自定义注解@BDController@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface BDController { String value() default "";}@BDService@Target({ElementType.TYP...
2019-09-24 15:58:04
792
原创 cglib动态代理--简单原理
cglib动态代理引入cglib.jar+asm.jar包。不同于JDK动态代理,cglib代理是通过继承方式实现的(方法不能是final修饰的)创建代理类:/** * @ClassName Sweetheart * @Description TODO 代理类 * @Version 1.0 **/public class Sweetheart implements Meth...
2019-09-19 13:26:30
353
原创 仿写JDK动态代理
仿写JDK动态代理单纯就是理解下JDK动态代理生成源码1、JDK动态代理2、仿写JDK动态代理单纯就是理解下JDK动态代理生成源码1、JDK动态代理JDK动态代理必须实现接口 接口: /** * @Description //TODO 漫威 * @Author wfq * @Date 9:25 2019/9/18 **/ public interface Marvel...
2019-09-18 16:32:10
171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人