自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

农夫三拳

balabala

  • 博客(176)
  • 资源 (4)
  • 收藏
  • 关注

原创 dubbo消费方调用服务流程

dubbo解析ReferenceConfig,经过dubbo构建代理、Invoker链路,注册消费者,并且订阅注册中心提供方发布的服务,并且经由cluster集群扩展、路由过滤、负载均衡到Protocol层、exchange层、Transport层完成netty服务消费。无论服务发布还是服务订阅,都是通过dubbo的十层架构完成的,每一层都是通过SPI机制或者adative机制进行扩展实现的,Invoker责任链路能够把每一层的的责任划分开来,结构清晰。

2024-06-06 16:07:12 397

原创 dubbo订阅服务

远程引用:创建 invoker 的核心逻辑是在 RegistryProtocol 的 doCreateInvoker 方法中完成的。本地引用:本地引用环节中使用的 invoker 对象是从 InjvmProtocol 中 exporterMap 获取到的。通过解析 @DubboReference 注解来标识需要订阅的服务,并且解析成ReferenceConfig配置类。ReferenceConfig 的 get 方法会先后进行本地引用与远程引用的两大主干流程。2、订阅提供方,可以实时感知到提供方的变化。

2024-06-06 16:06:25 282

原创 dubbo发布服务

通过扫描指定包路径下含有 @DubboService 注解的 Bean 定义,把扫描出来的 Bean 定义属性,全部转移至新创建的 ServiceBean 类型的 Bean 定义中,为后续导出做准备。主要有两块,一块是 injvm 协议的本地导出,一块是暴露协议的远程导出,远程导出与本地导出有着实质性的区别,远程导出会使用协议端口,通过 Netty 绑定来提供端口服务。远程导出的一个分支,会将提供方的服务接口信息,通过 Curator 客户端,写到 Zookeeper 注册中心服务端去。

2024-06-06 16:05:37 481

原创 Dubbo动态服务下线

1、Dubbo服务消费端会使用Zookeeper里面的Watch来针对Zookeeper Server端的/providers节点注册监听,3、Dubbo Client端收到事件以后,就会把本地缓存的这个服务地址删除,这样后续就不会把请求发送到失败的节点上,完成服务下线感知。2、一旦这个节点下的子节点发生变化,Zookeeper Server就会发送一个事件通知Dubbo Client端。dubbo是依赖Zookeeper里面提供的Watch机制来实现的。

2024-06-06 16:04:08 474

原创 RocketMq Broker源码

NameServer 在收到来自 Broker 的心跳消息后,更新 BrokerLiveInfo 中的 lastUpdateTimestamp,如果 NameServer 长时间未收到 Broker 的心跳信息,NameServer 就会将其移除。brokerAddrTable:维护了 Broker Name 和 Broker 元信息的映射关系,Broker 通常以 Master-Slave 架构部署,BrokerData 记录了同一个 Broker Name 下所有节点的地址信息。

2024-06-04 17:03:32 231

原创 RocketMQ consumer DefaultLitePullConsumerImpl 拉模式

推模式做了封装,Broker启动时会将PullRequest封装起来,通过callback设计模式让consumer自行拉取消息,表面看起来时推消息,实际还是consumer自行拉取。4、长轮询优化:使用延时Task处理PullRequest,每隔5秒拉取消息,当处理大批量消息,延迟任务变更为10秒。1、从阻塞队列里面消费PullRequest,PullRequest调用netty client做出Response。拉模式是由consumer主动去拉取消息,自行从阻塞队列里面拉取PullRequest。

2024-06-04 15:23:19 360

原创 Redisson用法

【代码】Redisson用法。

2024-05-31 17:51:11 103

原创 Tomcat启动过程

从配置文件读取信息,并且将pojo,StandardServer、StandardService、StandardEngine、StandardHost、Connector类名加载到集合中。将StandardServer、StandardService、StandardEngine、StandardHost、Connector类实例化。发生在org.apache.catalina.startup.Catalina#load()2、容器启动,启用StandardContext维持Socket连接。

2024-05-29 14:44:18 263

原创 order by工作过程和优化

order by 是由优化器决定的,如果优化器认为filesort速度快,那么走filesort排序,如果优化器认为索引速度快,那么走索引排序。

2024-05-28 15:26:37 162

原创 优化Using filesort

xxx。

2024-05-28 00:16:18 123

原创 mysql innodb为什么选择B+树

mysql底层采用B+树的数据结构,页索引16KB,全部存储到B+树的非叶子节点上,16KB全是索引数据,相对于B树存储键值对而言,能够存储更多的数据。并且由于索引的关系,树的层高就更矮,而底层的双向链表,对于范围索引,排序查找、去重更有优势。

2024-05-28 00:12:33 108

原创 BeanFactory、FactroyBean、ApplicationContext

定制的工厂Bean,可以通过抽象工厂方式创建的bean,不纳入spring的生命周期、依赖、注入特性,相当于spring给第三方的一个扩展,比如dubbo的@DubboReference,ReferenceBean交给dubbo ioc自己管理。实现BeanFactory接口,全局上下文,非spring自动注入但加入spring管理的bean,刷新生命周期的时候调用的工厂直接就是ApplicationContext,通过ApplicationContext一样可以刷新容器。

2024-05-26 18:03:49 200

原创 spring自定义初始化的加载顺序

构造函数>@PostConstruct > afterPropertiesSet > init-method。

2024-05-26 17:41:15 470

原创 @Service 、@Component、@Repository

xxxx。

2024-05-26 17:37:27 332

原创 spring refresh

负责spring ioc、proxy 、aop 、init、event的整合。

2024-05-26 13:38:24 368

原创 spring注入方式

2024-05-25 14:38:23 321

原创 创建线程的四种方式

2024-05-23 22:54:59 128

原创 守护线程

2024-05-23 22:54:10 103

原创 线程的状态

2024-05-23 22:53:09 114

原创 二叉树、红黑树、二叉平衡树

红黑树优化了平衡二叉树需要频繁自旋的场景,插入最多需要两次旋转,删除最多需要三次旋转,不需要顾忌左右子树的高度差1的情况,权衡下,红黑树插入和删除的效率其实更高。缺点:为了平衡左子树和右子树的高度相差不超过1,插入和删除节点需要频繁左旋和右旋,消耗性能。左旋:逆时针旋转两个节点,让一个节点被其右子节点取代,而该节点成为右子节点的左子节点。右旋:顺时针旋转两个节点,让一个节点被其左子节点取代,而该节点成为左子节点的右子节点。特点:左子树和右子树需要通过自旋方式平衡两边树的高低,可以避免链表的出现。

2024-05-23 15:04:37 219

原创 jvm内存模型

2024-05-19 14:38:56 94

原创 jvm类加载过程

2024-05-19 14:36:59 98

原创 Elasticsearch聚合模型

占坑。

2024-04-23 16:47:20 320 2

原创 Elasticsearch分布式搜索

占坑。

2024-04-23 16:46:36 343 1

原创 Elasticsearch搜索模型

占坑。

2024-04-23 16:45:57 403 2

原创 dubbo流量控制

占坑。

2024-04-23 16:42:46 290

原创 dubbo异步

占坑。

2024-04-23 16:38:14 242

原创 dubbo wrapper

占坑。

2024-04-23 16:12:31 109

原创 dubbo adaptive

占坑。

2024-04-23 16:11:49 87

原创 dubbo compiler

占坑。

2024-04-23 16:10:53 117

原创 dubbo proxy

占坑。

2024-04-23 16:10:01 112

原创 dubbo发布、订阅服务、调用流程

发布服务过程订阅服务流程。

2024-04-23 15:59:55 132

原创 mybatis-plus、PageHelper分页插件

PageHelper:轻量级插件,无须撰写limit语句。mybatis-plus:重量级插件,无须撰写limit。

2024-02-19 12:53:08 241

原创 mybatis datasource种类

mybatis 内置了三种数据源,分别是Pooled,Unpooled和JNDI,其中Pooled数据源是具有连接池的。开发场景下,通常使用以下几种数据源。Druid:兼顾了性能和监控,综合。C3P0:性能稍好,常用。Hikari:性能快。

2024-02-18 18:30:15 143

原创 mybatis实现动态标签源码过程

xxx。

2024-02-18 18:24:44 126

原创 mybatis整合plugin处理

【代码】mybatis整合plugin处理。

2024-02-17 14:27:44 234

原创 mybatis缓存机制

经验:二级缓存性能很好,但是对开发者有一定的要求,这个要求就是在撰写mapper时候,一定要保证在命名空间里面的单表查询,一切join表场景全部避免,这样可以有效避免脏读场景。1、大型分布式系统、小公司多实例部署同一台机器建议不要开启二级缓存,多表join场景下,有的表可以读到最新的值,但有的表会读到以前的缓存,同样会出现脏读场景。1、大型分布式系统、小公司多实例部署同一台机器建议关闭一级缓存,产生脏读,读旧值情况比较大。一级缓存(SqlSession会话级别缓存)二级缓存(命名空间缓存,可以跨会话级别)

2024-02-16 23:33:47 199

原创 #{}和${}区别

{}类似jdbc中的PreparedStatement,对于传入的参数,在预处理阶段会使用?代替,可以有效的避免SQL注入。${}就是拼接字符串,没有预编译操作。

2024-02-16 20:54:46 229

原创 Innodb下修改事务工作流程(buffer pool、redo log、undolog、binlog)

undolog的写入最开始写到内存中的,然后由1个后台线程定时刷新到磁盘中的。Innodb优先从Buffer Pool中查询该条记录,如果没有就从磁盘文件中缓存到Buffer Pool中。binlog中记录的信息包括:事务开始的时间、数据库名、表名、事务ID、SQL语句等。提交事务后,后台异步线程将Buffer Pool写入磁盘中,这里会有一定的延时。同步修改到redo log buffer,此时并没有写入磁盘中。更新Buffer pool中的脏页,此时并没有写入磁盘中。4、写入redo log日志。

2024-02-16 15:01:45 248

原创 union和union all区别

Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则排序;效率高 UnionAll:对两个结果集进行并集操作,包括重复行,不进行排序;效率低

2024-02-16 12:50:09 90

Tomcat安装包

Tomcat7.0安装包+源码包

2017-05-22

mysql-connector

mysql连接池

2017-05-22

mybiatis代码生成

mybitas代码自动生成工具

2017-05-22

svn-server-client

svn的客户端和服务端

2017-05-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除