Jiefang's Blog

过去心不可得,现在心不可得, 未来心不可得

Hystrix-04丨HystrixCommand执行流程

HystrixCommand执行流程 状态 1 2 3 4 5 6 7 8 9 10 11 protected enum TimedOutStatus { NOT_EXECUTED, COMPLETED, TIMED_OUT } protected enum CommandState { NOT_STARTED, OBSERV...

Hystrix-03丨Hystrix与Feign整合

Hystrix与Feign整合 自动装配 feign.hystrix.enabled,feign启用Hystrix时,使用HystrixFeign.builder。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Configuration(proxyBeanMethods = false) public class FeignClientsConfiguratio...

Feign-05丨Feign与Ribbon重试机制

Feign与Ribbon重试机制 yml配置 1 2 3 4 5 6 7 8 9 10 11 spring: cloud: loadbalancer: retry: enabled: true ribbon: ConnectTimeout: 1000--连接超时设置 ReadTimeout: 1000--读取超时设置 OkToRetryOnAllOp...

Feign-04丨LoadBalancerFeignClient核心流程

LoadBalancerFeignClient核心流程 自动装载 FeignRibbonClientAutoConfiguration 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 @ConditionalOnClass({ ILoadBalancer.class, ...

Feign-03丨Feign动态里方法调用

Feign动态代理方法调用 Feign动态代理方法调用需要将FeignClient动态代理的对与接口的方法组合起来,进行调用。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 @Override ReflectiveFeign#newInstance(Target<T> target...

Feign-02丨Feign源码分析

Feign动态代理源码分析 整体流程 自动装配 FeignClientsConfiguration 自动装载Feign.Builder、Decoder、Encoder、Contract等Bean至ApplicationContext。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...

Feign-01丨Feign简介

Feign简介 简介 GitHub地址:https://github.com/OpenFeign/feign 什么是feign? Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSocket. Feign’s first goal was reducing the com...

Ribbon-05丨RestTemplate实际调用与IPing

RestTemplate实际调用与IPing RestTemplate实际调用过程 LoadBalancerInterceptor#intercept() 1 2 3 4 5 6 7 8 9 10 11 12 public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor { @Ove...

Ribbon-04丨Ribbon负载均衡源码

ribbon负载均衡源码 RibbonClientConfiguration自动装配使用的负载均衡器是ZoneAwareLoadBalancer,默认的负载均衡策略是ZoneAvoidanceRule。 ZoneAwareLoadBalancer chooseServer() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20...

Ribbon-03丨Ribbon与Eureka整合

ribbon与eureka整合 拉取注册表 ZoneAwareLoadBalancer构造方法 ZoneAwareLoadBalancer构造初始化,执行父类DynamicServerListLoadBalancer构造方法。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29...

Ribbon-02丨Ribbon与RestTemplate源码分析

ribbon 与RestTemplate源码分析 本文主要针对 spring-cloud-starter-netflix-ribbon 的 2.2.2.RELEASE 版本进行源码的解析。 注解LoadBalanced 使用注解@LoadBalanced,注解在RestTemplate上。在spring-cloud-commons包中。 1 2 3 4 5 6 7 8 9 packa...

Ribbon-01丨Ribbon简介

ribbon简介 Ribbon is a client side IPC library that is battle-tested in cloud. It provides the following features. Load balancing Fault tolerance Multiple protocol (HTTP, TCP, UDP) ...

Eureka-16丨eureka整体架构设计

eureka整体架构设计 eureka整体架构内容 eureka server启动:注册中心; eureka client启动:服务实例; 服务注册:多层map缓存架构; eureka server集群:注册表同步,多级队列的任务批处理机制; 全量拉取注册表:多级缓存机制; 增量拉取注册表:获取recentChangeQueue最近3分钟变化实例,一致性h...

Eureka-15丨eureka server同步任务批处理机制

eureka server同步任务批处理机制 向队列中放入任务 ApplicationResource#addInstance()-->PeerAwareInstanceRegistryImpl#register()-->PeerAwareInstanceRegistryImpl#replicateToPeers-->PeerAwareInstanceRegistryI...

Eureka-14丨eureka server集群机制

eureka server集群机制 定时刷新eureka server集群列表 EurekaBootStrap初始化eureka server上下文时,会初始化其它eureka server集群地址,代表其它eureka server的PeerEurekaNode列表peerEurekaNodes。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

Eureka-13丨eureka server自我保护机制

eureka server自我保护机制 Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期。 使用参数eureka.server.enable-self-preservation=false来开启或者关闭自我保护机制。 1 2 3 4 //Eureka Serv...

Eureka-12丨服务实例故障下线

服务实例故障下线 eureka依靠服务实例发送心跳,来感知服务实例是否已经宕机。如果一段时间没有接受到服务心跳,则将服务实例移除。 源码 在eureka server初始化时,会初始化实例移除的线程和定时器。 EurekaBootStrap.initEurekaServerContext()->PeerAwareInstanceRegistryImpl.openForTraffic(...

Eureka-11丨服务实例下线

服务实例下线 shutdown DiscoveryClient中的shutdown()方法是服务实例关闭方法,会关闭instanceInfoReplicator、心跳线程池、缓存刷新线程池和定时任务线程池,会调用服务下线方法unregister(),关闭心跳监控和注册监控。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

Eureka-10丨服务实例心跳机制(服务续约)

服务实例心跳机制(服务续约) 初始化线程池 DiscoveryClient构造时初始化发送心跳的线程池。 1 2 3 4 5 6 7 8 9 //心跳线程池 heartbeatExecutor = new ThreadPoolExecutor( 1, clientConfig.getHeartbeatExecutorThreadPoolSize(),...

Eureka-09丨client增量抓取机制

eureka client增量抓取机制 每隔30S抓取注册表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 private void initScheduledTasks() { //初始化抓取注册表定时任务 if (clientConfig.shouldFetchRegistry(...