- 博客(74)
- 资源 (24)
- 收藏
- 关注
原创 ShenYu网关注册中心之Zookeeper注册原理
至此,服务端注册流程也就分析完了,主要通过对外提供的接口,接受客户端的注册信息,然后写入到Disruptor队列,再从中消费数据,根据接收到的元数据和URI数据更新admin的选择器、规则、元数据和选择器的handler。是在一开始读取配置的时候就创建了,是客户端注册类,用来将数据发送到注册中心的类,不同的注册方式有不同的实现类,该示例使用。是用于实现客户端注册的接口,会根据注册中心的配置通过SPI方式创建客户端注册类,每一个注册方式都对应一个实现类。项目,所以注册的入口往往在自动装配类中。
2023-12-14 19:18:53
1543
原创 ShenYu网关注册中心之HTTP注册原理
URI注册逻辑基本相似,只是比元数据多了一步探测客户端时候已经启动完成的操作,保证客户端启动完成后再注册URI,后面的逻辑就跟元数据一样了。是在一开始读取配置的时候就创建了,是客户端注册类,用来将数据发送到注册中心的类,不同的注册方式有不同的实现类,该示例使用http方式注册。是用于实现客户端注册的接口,会根据注册中心的配置通过SPI方式创建客户端注册类,每一个注册方式都对应一个实现类。是用于实现服务端注册的接口,会根据注册中心的配置通过SPI方式创建注册类,每一个注册方式都对应一个实现类。
2023-12-14 15:51:43
1485
原创 ShenYu网关Http服务探活解析
Shenyu HTTP服务探活是一种用于检测HTTP服务是否正常运行的机制。它通过建立Socket连接来判断服务是否可用。当服务不可用时,将服务从可用列表中移除。
2023-12-14 11:16:23
1540
原创 Seata AT模式源码解析三(AT模式工作机制)
从一个微服务示例开始,案例采用Seata官方提供的Demo。用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:● 仓储服务:对给定的商品扣除仓储数量。● 订单服务:根据采购需求创建订单。● 帐户服务:从用户帐户中扣除余额。架构图订单服务账户服务仓储服务主业务逻辑这里主要的就是在主业务方法上添加上全局事务注解@GlobalTransactional,代表从这里开始开启全局事务,该方法里的调用不管是本地调用还是远程调用,都在全局事务管辖范围内。执行的流程如下:上一篇说到,当调用被
2023-05-26 15:03:34
745
原创 Seata AT模式源码解析二(Seata Client端启动流程)
由于我们一般都是在springboot中使用的,而与springboot集成的我们一般就先看starter的spring.factories文件,看看它的自动装配这里面主要关注SeataAutoConfiguration和SeataDataSourceAutoConfiguration。该配置类要生效的条件是seata.enabled值为true,该值默认就是为true,所以该配置类默认是生效的。
2023-05-26 15:02:41
938
原创 Seata AT模式源码解析一(Seata Server端启动流程)
在DefaultCoordinator里还创建了一个DefaultCore,该类是默认的 TC 事务操作实现,DefaultCoordinator的开启、提交、回滚全局事务,注册、提交、回滚分支事务都是委托给这个类。主要就是创建了5个定时任务,主要用于事务的重试机制,因为分布式环境的不稳定性会造成事务处于中间状态,所以要通过不断的重试机制来实现事务的最终一致性。在阅读源码的时候,有些源码是要细看的,但是有些源码可以大致猜测一下它的作用,就直接略过去了,抓住真正的重点去看。
2023-05-26 14:55:18
1420
原创 Spring扩展之HandlerMethodArgumentResolver(自定义请求参数解析器)
文章目录作用执行时机应用作用HandlerMethodArgumentResolver 是请求参数解析器,不管你是要获取Cookie中的值,Header中的值,JSON格式的数据,URI中的值,还是请求体中的数据,Spring都提供了相对应的参数解析器来提取参数。Spring默认提供了26中参数解析器,比如我们最常用的参数注解 @RequestParam 就是由 RequestParamMethodArgumentResolver 解析的,PathVariableMethodArgumentResolv
2022-05-02 11:04:07
3189
原创 SpringMVC源码解析
Spring版本是5.1.x文章目录代码示例web.xmlapplicationContext.xmlspring-mvc.xmlTestControllerTestServicetest.jsp源码解析创建Spring容器并刷新创建spring容器刷新spring容器创建SpringMVC容器并刷新创建springmvc容器刷新springmvc容器处理@RequestMapping注解,建立url和方法的关系初始化DispacherServletDispacherServlet处理请求根据当前请求.
2022-04-18 16:48:24
654
原创 Spring AOP 源码解析
@EnableAspectJAutoProxyaop入口是@EnableAspectJAutoProxy注解@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(AspectJAutoProxyRegistrar.class)public @interface EnableAspectJAutoProxy { /** * 决定创建代理的方式,默认false,表示根据类是否实现接口来判断
2022-04-15 16:58:56
487
原创 Spring扩展之ApplicationContextAwareProcessor和Aware
作用该类实现了BeanPostProcessor接口,是一个bean后置处理器,是将 ApplicationContext 传递给实现EnvironmentAware 、 EmbeddedValueResolverAware 、 ResourceLoaderAware 、 ApplicationEventPublisherAware 、MessageSourceAware和 ApplicationContextAware接口的BeanPostProcessor实现。执行时机既然是BeanPostPro
2022-04-14 19:12:43
294
原创 Spring扩展之BeanDefinitionRegistryPostProcessor
作用BeanDefinitionRegistryPostProcessor 是 Spring 的扩展点之一。BeanDefinitionRegistryPostProcessor 实现了BeanFactoryPostProcessor 接口,所以它可以实现对 BeanDefinition 的修改。当然BeanDefinitionRegistryPostProcessor 是对 BeanFactoryPostProcessor 功能的扩展,可以动态注册 BeanDefinition,不仅是普通的 bean的
2022-04-14 19:11:04
1463
原创 Spring扩展之BeanFactoryPostProcessor
作用BeanFactoryPostProcessor,BeanFactory后置处理器是 Spring 的扩展点之一。通过自定义 BeanFactoryPostProcessor 可以实现对 BeanDefinition 的修改。执行入口BeanFactoryPostProcessor 的执行入口在容器的刷新方法refresh中@Overridepublic void refresh() throws BeansException, IllegalStateException { sync
2022-04-14 19:08:46
798
原创 Spring扩展之BeanPostProcessor
作用BeanPostProcessor,顾名思义是bean后置处理器,是 Spring 的扩展点之一。通过自定义 BeanPostProcessor 可以实现对 Bean 的修改,用于在bean实例化后,要初始化的前后对bean进行处理public interface BeanPostProcessor { /** * 在初始化前调用 */ @Nullable default Object postProcessBeforeInitialization(Object bean, Stri
2022-04-14 17:02:21
1278
原创 Spring扩展之 @Import 和 ImportBeanDefinitionRegistrar 接口
简介ImportBeanDefinitionRegistrar,该接口主要用来注册beanDefinition。很多三方框架集成Spring 的时候,都会通过实现该接口,配合@Import注解注册特定的bean到spring 容器中,比如开启Feign的@EnableFeignClients。还有一些spring自身的@Enable* 注解,也是通过该方式注册bean定义的,比如@EnableAspectJAutoProxy。使用方式自定义一个ImportBeanDefinitionRegistrar
2022-04-14 15:07:04
1529
原创 Spring扩展之@Import 和 ImportSelector 接口
简介/* * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * htt
2022-04-14 11:21:39
854
原创 Spring IOC 源码解析之populateBean(五)
Spring版本5.1.x文章目录populateBeanAutowiredAnnotationBeanPostProcessor#postProcessPropertiesInjectedElement#injectDefaultListableBeanFactory#resolveDependency处理@LazydoResolveDependencyfindAutowireCandidates4.1、获取到所有requiredType的候选beanName4.2、遍历resolvableDepe.
2022-04-13 15:45:14
217
原创 Spring IOC 源码解析之createBean(四)
Spring版本5.1.x文章目录doCreateBean1、创建bean实例2、应用后置处理器MergedBeanDefinitionPostProcessor3、判断是否要提前暴露该bean4、提前暴露该bean的ObjectFactory5、进行属性填充6、处理 bean 初始化完成后的各种回调,比如后置处理,init方法等7、如果允许提前曝光实例,则进行循环依赖检查8、注册用于销毁的bean@Overrideprotected Object createBean(String beanNa.
2022-04-13 15:33:07
302
原创 Spring IOC 源码解析之getBean(三)
Spring版本5.1.x文章目录1、将bean名称转换为真正的名称2、从单例map中尝试获取bean3、从上一步获取到的对象中得到真正的bean,因为有可能是FactoryBean4、针对prototype的bean5、检查一下这个 BeanDefinition 在容器中是否存在6、将bean标记为已创建(或将要创建)7、重新获取合并bean定义并检查8、初始化要依赖的Bean9、创建单例bean(重点)10、创建prototype实例11、创建除sington和prototype其他scope的b.
2022-04-13 15:24:05
253
原创 Spring IOC 源码解析之refresh(二)
Spring版本5.1.x文章目录prepareRefreshobtainFreshBeanFactoryprepareBeanFactorypostProcessBeanFactoryinvokeBeanFactoryPostProcessorsregisterBeanPostProcessorsinitMessageSourceinitApplicationEventMulticasteronRefreshregisterListenersfinishBeanFactoryInitializati.
2022-04-13 15:23:37
274
原创 Spring IOC 源码解析之创建应用上下文(一)
示例Messagepackage com.huang.sourcelearn;import org.springframework.stereotype.Component;@Componentpublic class Message { public Message() { System.out.println(123); }}Studentpackage com.huang.sourcelearn;public class Student { private
2022-04-13 15:22:49
191
原创 Spring之事务注解@Transactional解析(二)
这里接上一篇Spring之事务注解@Transactional解析(一)来分析下Transactionlnterceptor 的事务增强逻辑。入口在 Transactionlnterceptor 类的 invoke 方法:@Override@Nullablepublic Object invoke(MethodInvocation invocation) throws Throwable { // Work out the target class: may be {@code null}.
2022-04-11 18:21:30
1139
原创 Spring之事务注解@Transactional解析(一)
代码示例@Configuration@EnableTransactionManagementpublic class DataSourceConfiguration { @Bean public BasicDataSource getBasicDataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver")
2022-04-11 10:48:31
2424
1
原创 Spring Cloud Alibaba Sentinel无法加载到Nacos中的规则配置解决方案
Spring Cloud Alibaba Sentinel在配置规则持久化时,按照官网的教程使用nacos作为数据源来配置,但在完成后,启动应用并调了一次接口后,发现sentinel-dashboard控制台并没有加载到Nacos中的规则配置信息,日志里没有异常信息,但有一句警告信息:converter can not convert rules because source is empty,后来我尝试在数据源的nacos配置中加上namespace id,因为我不是在默认的namespace里,结果就可
2021-11-16 14:23:33
10724
11
原创 Spring Cloud Eureka源码解析之自我保护机制( 八)
在开发环境时,我们经常可以在eureka页面上看到这么一句红色的话这就代表了触发了自我保护机制,eureka不会再剔除过期的服务。默认情况下,当EurekaServer在一定时间内(默认90秒)没有接收到某个客户端实例的心跳,EurekaServer将会下线该实例。但是当网络分区故障发生或网络偶尔抖动时,客户端与EurekaServer之间无法正常通信,此时不应该下线实例。Eureka通过“自我保护机制”来解决这个问题:当EurekaServer短时间内丢失过多客户端时,这个节点就会进入自我保护模式。
2021-10-15 15:51:29
347
原创 Spring Cloud Eureka源码解析之服务剔除(七)
上篇讲到的是服务正常下线的情况,如果遇到网络不稳定或机器宕机了,导致了server一直接收不到服务的心跳,这时就可以认为该服务实例故障了,需要剔除了。在EurekaServer启动流程一节初始化eureka server上下文中,有这样一行代码this.registry.openForTraffic(this.applicationInfoManager, registryCount);这行代码就会创建一个定时剔除过期服务的定时任务@Overridepublic void openForTraf
2021-10-15 15:51:01
271
原创 Spring Cloud Eureka源码解析之服务下线(六)
当Eureka Client 服务关闭停止时,会触发 DiscoveryClient的shutdown关闭eureka-client(正常关闭,非宕机等的非正常关闭)@PreDestroy@Overridepublic synchronized void shutdown() { if (isShutdown.compareAndSet(false, true)) { logger.info("Shutting down DiscoveryClient ...");
2021-10-15 15:50:12
261
原创 Spring Cloud Eureka源码解析之服务注册列表拉取(五)
在Eureka Client启动流程一文讲到Client刚启动时会全量拉取一次,后面会开启一个定时任务,根据条件以及本地缓存情况全量拉取或增量拉取private boolean fetchRegistry(boolean forceFullRegistryFetch) { Stopwatch tracer = FETCH_REGISTRY_TIMER.start(); try { // 如果增量被禁用或者是第一次获取(本地缓存为空),则全量获取 Appli
2021-10-15 15:49:45
712
原创 Spring Cloud Eureka源码解析之服务续约(四)
EurekaClientEureka Client启动时会创建一个每隔30s向Eureka Server发送心跳的定时任务如果续约的响应状态码是404,则需要重新去注册Eureka Server接收续约请求处理续约请求的是InstanceResource#renewLease方法@PUTpublic Response renewLease( @HeaderParam(PeerEurekaNode.HEADER_REPLICATION) String isReplication,
2021-10-15 15:49:19
157
原创 Spring Cloud Eureka源码解析之服务注册(三)
EurekaClient在Eureka Client启动流程一节的最后说到,instanceInfoReplicator.start(clientConfig.getInitialInstanceInfoReplicationIntervalSeconds());里有服务注册的逻辑,所以就从这里开始看public void start(int initialDelayMs) { // 将started设置为true,表示已启动了 if (started.compareAndSet(fa
2021-10-15 15:48:48
174
原创 Spring Cloud Eureka源码解析之Eureka Client启动流程(二)
看下EurekaClient的自动装配类EurekaClientAutoConfigurationEurekaClientConfigBean包含了eureka.client的配置@Bean@ConditionalOnMissingBean(value = EurekaClientConfig.class, search = SearchStrategy.CURRENT)public EurekaClientConfigBean eurekaClientConfigBean(Configurable
2021-10-15 15:48:20
224
原创 Spring Cloud Eureka源码解析之Eureka Server启动流程(一)
通过在启动类上添加@EnableEurekaServer注解启用EurekaServer@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(EurekaServerMarkerConfiguration.class)public @interface EnableEurekaServer {}该注解引入了一个配置类EurekaServerMarkerConfiguration@Con
2021-10-15 15:47:04
260
原创 RocketMQ源码解析十一(Consumer上报消费进度流程(集群模式))
Consumer在消费者启动过程中,会启动MQClientInstance,而MQClientInstance中会启动多个定时任务,其中就包括定时上报消费进度:
2021-09-28 15:58:07
367
原创 RocketMQ源码解析十(定时消息(延时消息)流程)
定时消息是指消息发送到Broker后,并不立即被消费者消费而是要等到特定的时间后才能被消费,RocketMQ不支持任意的时间精度。发送消息时,只要给消息设置一个延时级别message.setDelayTimeLevel(3),消息发送到Broker后会延时固定时间后才可以被消费到。延时有一下几个级别:...
2021-09-28 15:55:15
701
2
原创 RocketMQ源码解析九(消息消费失败重试流程)
Consumer直接从ConsumeMessageConcurrentlyService发送重试消息方法开始
2021-09-28 15:52:20
553
原创 RocketMQ源码解析八(Consumer并发消费消息)
回顾一下消息拉取,PullMessageService 负责对消息队列进行消息拉取,从远端服务器拉取消息后将消息存人ProcessQueue消息队列处理队列中,然后调用ConsumeMessageService#submitConsumeRequest方法进行消息消费,使用线程池来消费消息,确保了消息拉取与消息消费的解耦。RocketMQ使用ConsumeMessageService来实现消息消费的处理逻辑。RocketMQ支持顺序消费与并发消费,这里将重点关注并发消费的消费流程,顺序消费将在之后的文档分析
2021-09-28 15:49:31
776
原创 RocketMQ源码解析七(Consumer拉取消息流程)
这里基于PUSH模式和集群模式来分析消息拉取机制。在Consumer启动的时候,会开启一个线程,专门用来拉取消息。
2021-09-28 15:46:18
770
原创 RocketMQ源码解析六(Consumer重平衡流程)
重平衡服务是在Consumer启动的时候启动的一个后台线程,每次重平衡后过20s后再发起一次重平衡
2021-09-28 15:42:36
682
冰点文库下载器
2017-07-17
C++ Qt设计模式(第2版) PDF
2017-01-20
JavaWeb-学生在线选课系统实例源码下载
2017-01-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人