10 2021 档案
摘要:Feign和Ribbon的重试机制 Ribbon的重试机制 配置 ribbon: ReadTimeout: 2000 ConnectTimeout: 2000 MaxAutoRetries: 1 #同一台实例最大重试次数,不包括首次调用 MaxAutoRetriesNextServer: 3 #重试
阅读全文
摘要:idea编译kafka 2.6 源码 最近项目要接入kafka和flink,有时间就学一下kafka的源码,就编译了一下kafka的源码,期间还是踩了不少坑的。 一、安装jdk 二、安装scala 三、安装gradle 四、本地启动zookeeper 最近在官网下载,然后解压,调整配置文件,将zoo
阅读全文
摘要:Feign的调用流程 动态代理的入口 前面已经分析过了创建的代理是FeignInvocationHandler,那我们就打断点,停在它的反射方法上,看看到底做了什么。 @Override public Object invoke(Object proxy, Method method, Object
阅读全文
摘要:FeignClientFactoryBean创建动态代理 探索FeignClient的注册流程 当直接进去注册的方法中,一步步放下走,都是直接放bean的定义信息中放入值,然后转成BeanDefinitionHolder,最后在注册到IOC容器中。 具体的信息可以看下面断点的图。 在仔细看一下就会发
阅读全文
摘要:Feign源码的入口 首先看一下demo工具的整体结构,ServiceB和ServiceA都要注册到eureka中,而serviceA-api是一个通用的api模块,由于Feign具有继承的特性,所以把接口都抽取出来了。 具体的代码如下: @RequestMapping("/user") publi
阅读全文
摘要:Ribbon的检查服务 上面一篇已经看到了Ribbon已经可以和Eureka整合了,而且可以通过EurekaClient拉取服务信息,如果拉取的服务中出问题了怎么办,就会导致在请求的时候发现请求不同,那么下面就看看IPing组件,它是专门检查服务是否有效的,有效的才会被留下来。 定时调度 因为Rib
阅读全文
摘要:Ribbon是怎么和Eureka整合的? 因为访问请求的时候,拿到的是LoadBalancer实例,通过它去访问被请求的服务,那它里面肯定会有服务请求,这样才能负载均衡。 ZoneAwareLoadBalancer被创建的时候,就是通过下面的有参构造器,它会调用父类的构造,就继续往下看。 publi
阅读全文
摘要:Eureka 过期 如果有一些服务过期了,或者宕机了,就不会调用shutdown()方法,也不会去发送请求下线服务实例。eureka就专门实现了一套过期的策略,去下线一些过期的服务。 它的入口就是在eureka server在启动初始化的时候,registry.openForTraffic(appl
阅读全文
摘要:Eureka 续约 (心跳检测) 心跳,eureka client每隔一定的时间,会给eureka server发送心跳,保持心跳,让eureka server知道自己还活着,lease renewal,续约,心跳. Eureka-Client 向 Eureka-Server 发起注册应用实例成功后
阅读全文
摘要:Eureka 下线 // DiscoveryClient.java @PreDestroy @Override public synchronized void shutdown() { if (isShutdown.compareAndSet(false, true)) { logger.info
阅读全文
摘要:Eureka的自我保护 当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eurek
阅读全文
摘要:Eureka Server的多级缓存和过期机制 多级缓存 之前写eureka-client客户端全量请求的时候,会走到缓存这边,下面就具体的看一下,server的多级缓存是怎么回事? eureka client初始化的时候,就会自动发送个请求到eureka server拉一次清抓取全量的注册表,这一
阅读全文
摘要:eureka-client拉取注册表 全量拉取 全量抓取注册表,eureka client第一次启动的时候,必须从eureka server端一次性抓取全量的注册表的信息过来,EurekaClient初始化的时候,就会自动全量抓取注册表 if (clientConfig.shouldFetchReg
阅读全文
摘要:Ribbon的调用流程 Ribbon在Netflix组件是非常重要的一个组件,在Zuul中使用Ribbon做负载均衡,以及Feign组件的结合等。在Spring Cloud 中,作为开发中,做的最多的可能是将RestTemplate和Ribbon相结合,你可能会这样写: @Bean @LoadBal
阅读全文
摘要:EurekaServer启动 看方法上的注释,初始化eureka,包含eureka集群的同步和发布注册,这个方法时重写ServletContextListener#contextInitialized,是eureka启动的入口了。在 Servlet 容器( 例如 Tomcat、Jetty )启动时,
阅读全文