本文将从leader处理器入手,详细分析node的增删改查流程及监听器原理。 回顾数据读写流程 leader ZookeeperServer.processPacket封装Request并提交给业务处理器 LeaderRequestProcessor做本地事务升级 PrepRequestProcessor做事务准备 ProposalRequestProcessor事务操作发proposal给follower节点,持久化到log文件 CommitProcessor读请求直接转发给下游处理器,事务操作等待到了quorum状态转发给下游处理器 ToBeAppliedRequestProcessor...

  0iyspjNUGW6d   2024年03月11日   79   0   0 Java

在zookeeper中,follower也可以接收客户端连接,处理客户端请求,本文将分析follower处理客户端请求的流程: 读请求处理 写请求转发与响应 follower接收转发客户端请求 网络层接收客户端数据包 leader、follower都会启动ServerCnxnFactory组件,用来接收客户端连接、读取客户端数据包、将客户端数据包转发给zk应用层。 在"zookeeper源码(08)请求处理及数据读写流程"一文中已经介绍,ServerCnxn在读取到客户端数据包之后,会调用zookeeperServer的processConnectRequest或processPacket...

  0iyspjNUGW6d   2024年02月26日   42   0   0 Java

Leader 构造方法 publicLeader(QuorumPeerself,LeaderZooKeeperServerzk)throwsIOException{ this.self=self; this.proposalStats=newBufferStats(); //获取节点间通信地址 Set<InetSocketAddress>addresses; if(self.getQuorumListenOnAllIPs()){ addresses=self.getQuorumAddress().getWildcardAddresses(); }else{ addresses=s...

  0iyspjNUGW6d   2024年02月19日   123   0   0 Java

ServerCnxnFactory 用于接收客户端连接、管理客户端session、处理客户端请求。 ServerCnxn抽象类 代表一个客户端连接对象: 从网络读写数据 数据编解码 将请求转发给上层组件或者从上层组件接收响应 管理连接状态,比如:enableRecv、sessionTimeout、stale、invalid等 保存当前的packetsReceived、packetsSent、lastCxid、lastZxid等 继承了Watcher接口,也可以作为监听器 两个实现类: NIOServerCnxn基于NIO NettyServerCnxn基于Netty NIOServer...

  0iyspjNUGW6d   2024年02月19日   105   0   0 Java

ZooKeeperServer 实现了单机版zookeeper服务端功能,子类实现了更加丰富的分布式集群功能: ZooKeeperServer |-QuorumZooKeeperServer |-LeaderZooKeeperServer |-LearnerZooKeeperServer |-FollowerZooKeeperServer |-ObserverZooKeeperServer |-ReadOnlyZooKeeperServer 主要字段 //tickTime参数默认值 publicstaticfinalintDEFAULT_TICK_TIME=3000; protectedin...

  0iyspjNUGW6d   2024年01月22日   21   0   0 Java

本文详细分析一下zookeeper的数据存储。 ZKDatabase 维护zookeeper服务器内存数据库,包括session、dataTree和committedlog数据,从磁盘读取日志和快照后启动。 关键字段 //数据节点树 protectedDataTreedataTree; protectedConcurrentHashMap<Long,Integer>sessionsWithTimeouts; protectedFileTxnSnapLogsnapLog;//用于操作底层数据文件 //committedLog中第一条和最后一条数据的zxid protectedlong...

  0iyspjNUGW6d   2024年01月09日   22   0   0 Java

在"zookeeper源码(03)集群启动流程"中介绍了leader选举的入口,本文将详细分析leader选举组件和流程。 leader选举流程(重要) quorumPeer的start阶段使用startLeaderElection()方法启动选举 LOOKING状态,投自己一票 createElectionAlgorithm创建选举核心组件:QuorumCnxManager(管理连接)、FastLeaderElection(选举)等 quorumPeer的mainloop根据当前状态执行不同流程 状态与流程: LOOKING使用fastLeaderElection.lookForLea...

  0iyspjNUGW6d   2023年11月12日   29   0   0 Java

本文将从启动类开始详细分析zookeeper的启动流程: 加载配置的过程 集群启动过程 单机版启动过程 启动类 org.apache.zookeeper.server.quorum.QuorumPeerMain类。 用于启动zookeeper服务,第一个参数用来指定配置文件,配置文件properties格式,例如以下配置参数: dataDir数据存储目录 dataLogDirtxnlog(事务日志)存储目录,默认dataDir clientPort接收客户端连接的端口,例如2181 tickTimeleader做quorum验证的周期时长,默认3000ms initLimitleader...

  0iyspjNUGW6d   2023年11月02日   43   0   0 Java

本文介绍一下zookeeper-3.9.0源码下载、编译及本地启动。 下载源码 gitclonehttps://gitee.com/apache/zookeeper.git cdzookeeper gitcheckoutrelease-3.9.0 gitcheckout-brelease-3.9.0 源码编译 README_packaging.md文件 该文件介绍了编译zookeeper需要的环境和命令。 编译环境 java-1.8.0_102 maven-3.3.9 maven编译 mvncleaninstall-DskipTests zookeeper-assembly/targ...

  0iyspjNUGW6d   2023年11月02日   84   0   0 Java

SpringCloud工程可以使用Nacos作为注册中心和配置中心,配置和使用非常简单,本文将简单介绍使用方式,并分析其实现方式。 SpringCloud工程集成Nacos SpringCloud工程使用Nacos非常简单,只需要引入依赖、编写配置参数、在启动类上添加注解即可。 引入依赖 <dependencyManagement> <dependencies> <!-SpringCloud--> <dependency> <groupId>org.springframework.cloud</groupId> <a...

  0iyspjNUGW6d   2023年11月02日   82   0   0 Java

spring-tx概述 spring-tx包使用注解驱动和AOP通知将事务开启、提交/回滚、以及复杂的传播机制封装了起来,开发者不再需要编写事务管理的代码,而是可以只关注自己的业务逻辑。 本文将简单介绍spring-tx使用步骤以及七种事务传播级别。 后续文章会阅读源码,深入分析spring-txaop通知、七种事务传播级别以及事务开启/提交/回滚的实现方式。 使用步骤 导入spring-tx依赖 使用@EnableTransactionManagement注解为应用开启事务支持 向spring容器注入一个TransactionManager实现,一般使用DataSourceTransact...

  0iyspjNUGW6d   2023年11月01日   65   0   0 Java

概述(Javadoc) 该注解开启spring的注解驱动事务管理功能,通常标注在@Configuration类上面用于开启命令式事务管理或响应式事务管理。 @Configuration @EnableTransactionManagement publicclassAppConfig{ @Bean publicFooRepositoryfooRepository(){ //configureandreturnaclasshaving@Transactionalmethods returnnewJdbcFooRepository(dataSource()); } @Bean publicDa...

  0iyspjNUGW6d   2023年11月01日   83   0   0 Java

问题概述 在Transactional方法中使用this方式调用另一个Transactional方法时,拦截器无法拦截到被调用方法,严重时会使事务失效。 类似以下代码: @Transactional publicvoidinsertBlogList(List<Blog>blogList){ for(Blogblog:blogList){ this.blogMapper.insertBlog(blog); } try{ TimeUnit.SECONDS.sleep(15); }catch(InterruptedExceptione){ e.printStackTrace(); } }...

  0iyspjNUGW6d   2023年11月01日   80   0   0 Java

AspectJ是Java语言实现的一个面向切面编程的扩展库,能够基于一定的语法编写Aspect代码,使用ajc编译器将其编译成.class文件,之后在Java程序编写或加载时将Aspect逻辑嵌入到指定的切面。 安装AspectJ 下载AspectJ 到官网下载安装包: http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.9.6.jar 安装AspectJ java-jaraspectj-1.9.6.jar 示例安装到D:\app\aspectj1.9目录下。 基础示例 目录结构 aspect...

  0iyspjNUGW6d   2023年11月01日   64   0   0 Java

spring-tx的事务拦截逻辑在TransactionInterceptor类,本文将详细分析其实现方式。 事务拦截器TransactionInterceptor spring-tx的事务拦截逻辑在TransactionInterceptor类,它实现了MethodInterceptor接口。 MethodInterceptor接口 MethodInterceptor接口的实现类封装aop切面拦截逻辑: publicinterfaceMethodInterceptorextendsInterceptor{ / Implementthismethodtoperformextratreat...

  0iyspjNUGW6d   2023年11月01日   40   0   0 Java

本文将通过阅读源码方式分析SpringBoot应用的启动流程,不涉及Spring启动部分(有相应的文章介绍)。 本文不会对各个流程做展开分析,后续会有文章介绍详细流程。 SpringApplication类 应用启动入口 使用以下方式启动一个SpringBoot应用: @SpringBootApplication publicclassSpringBootDemoApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(SpringBootDemoApplication.class,args); } } r...

  0iyspjNUGW6d   2023年11月01日   106   0   0 Java

SpringBoot的组件扫描是基于Spring@ComponentScan注解实现的,该注解使用basePackages和basePackageClasses配置扫描的包,如果未配置这两个参数,Spring将扫描该配置类所属包下面的组件。 在服务启动时,将使用ConfigurationClassPostProcessor扫描当前所有的BeanDefinition,解析Configuration类,如果Configuration类标注了ComponentScan注解,将获取basePackages和basePackageClasses配置并扫描对应的包下面的组件。 ConfigurationC...

  0iyspjNUGW6d   2023年11月01日   40   0   0 Java

在SpringBoot中,EnableAutoConfiguration注解用于开启自动装配功能。 本文将详细分析该注解的工作流程。 EnableAutoConfiguration注解 启用SpringBoot自动装配功能,尝试猜测和配置可能需要的组件Bean。 自动装配类通常是根据类路径和定义的Bean来应用的。例如,如果类路径上有tomcat-embedded.jar,那么可能需要一个TomcatServletWebServerFactory(除非已经定义了自己的ServletWebServerFactoryBean)。 自动装配试图尽可能地智能化,并将随着开发者定义自己的配置而取消自动装...

  0iyspjNUGW6d   2023年11月01日   48   0   0 Java

本文将通过阅读AnnotationConfigApplicationContext源码,分析Spring启动流程。 创建AnnotationConfigApplicationContext AnnotationConfigApplicationContextapplicationContext=newAnnotationConfigApplicationContext(); applicationContext.register(XxConfig.class); applicationContext.register(YyConfig.class); applicationContext.re...

  0iyspjNUGW6d   2023年11月01日   53   0   0 Java

本文通过阅读Spring源码,分析Bean实例化流程。 Bean实例化入口 上一篇文章已经介绍,Bean实例化入口在AbstractApplicationContext类的finishBeanFactoryInitialization方法: protectedvoidfinishBeanFactoryInitialization(ConfigurableListableBeanFactorybeanFactory){ //Initializeconversionserviceforthiscontext. if(beanFactory.containsBean(CONVERSION_SER...

  0iyspjNUGW6d   2023年11月01日   87   0   0 Java
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~